多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php框架 > 框架設計 > PHP設計模式――簡單工廠

PHP設計模式――簡單工廠

來源:程序員人生   發布時間:2015-04-14 08:23:03 閱讀次數:3267次

      聲明:本系列博客參考資料《大話設計模式》,作者程杰。


        前面兩節內容介紹了甚么是設計模式和6大原則,相信看完前兩節內容大家對設計模式已有了初步的認識,接下來講1下設計模式的分類。


        1般將面向對象設計模式分為3類:創建型、結構型、行動型3種。


        創建型:創建對象時,不再由我們直接實例化對象;而是根據特定場景,由程序來肯定創建對象的方式,從而保證更大的性能、更好的架構優勢。創建型模式主要有簡單工廠模式(其實不是23種設計模式之1)、工廠方法、抽象工廠模式、單例模式、生成器模式、原型模式。


       結構型:用于幫助將多個對象組織成更大的結構。結構型模式主要有適配器模式、橋接模式、組合器模式、裝潢器模式、門面模式、亨元模式和代理模式。


       行動型:用于幫助系統間各對象的通訊,和如何控制復雜系統中流程。行動型模式主要有命令模式、解釋器模式、迭代器模式、中介者模式、備忘錄模式、視察者模式、狀態模式、策略模式、模板模式、訪問者模式和職責鏈模式。

          

       今天主要介紹創建型的第1種簡單工廠模式。

       注意:在瀏覽本系列博客的時候1定要有瀏覽UML類圖、面向對象PHP編程基礎。


      

       簡單工廠模式不屬于23種經常使用面向對象設計模式之1。簡單工廠模式是由1個工廠對象決定創建出哪種產品類的實例。簡單工廠模式是工廠模式家族中最簡單實用的模式,可以理解為是不同工廠模式的1個特殊實現。其實質是由1個工廠類根據傳入的參數動態決定應當創建哪個產品類(這些產品類繼承自1個父類或接口)的實例。


                                    

       角色及職責:  

       工廠(SimpleFactory)角色:簡單工廠模式的核心,它負責實現創建所有實例的內部邏輯。工廠類可以被外界直接調用,創建所需的產品對象。

       抽象產品(IProduct)角色:簡單工廠模式所創建的所有對象的父類,它負責描寫所有實例所共有的公共接口。

       具體產品(Concrete Product)角色:是簡單工廠模式的創建目標,所有創建的對象都是充當這個角色的某個具體類的實例。

      需求:根據提供相應的屬性值由簡單工廠創建具有相應特性的產品對象。

      現根據以上UML類圖編寫以下PHP代碼。

     

<?php /** * Created by PhpStorm. * User: Jiang * Date: 2015/4/9 * Time: 21:48 */ /**抽象產品角色 * Interface IProduct 產品接口 */ interface IProduct { /**X軸旋轉 * @return mixed */ function XRotate(); /**Y軸旋轉 * @return mixed */ function YRotate(); } /**具體產品角色 * Class XProduct X軸旋轉產品 */ class XProduct implements IProduct { private $xMax=1; private $yMax=1; function __construct($xMax,$yMax) { $this->xMax=$xMax; $this->yMax=1; } function XRotate() { echo "您好,我是X軸旋轉產品,X軸轉轉轉。。。。。。"; } function YRotate() { echo "抱歉,我是X軸旋轉產品,我沒有Y軸。。。。。。"; } } /**具體產品角色 * Class YProduct Y軸旋轉產品 */ class YProduct implements IProduct { private $xMax=1; private $yMax=1; function __construct($xMax,$yMax) { $this->xMax=1; $this->yMax=$yMax; } function XRotate() { echo "抱歉,我是Y軸旋轉產品,我沒有X軸。。。。。。"; } function YRotate() { echo "您好,我是Y軸旋轉產品,Y軸轉轉轉。。。。。。"; } } /**具體產品角色 * Class XYProduct XY軸都可旋轉產品 */ class XYProduct implements IProduct { private $xMax=1; private $yMax=1; function __construct($xMax,$yMax) { $this->xMax=$xMax; $this->yMax=$yMax; } function XRotate() { echo "您好,我是XY軸都可旋轉產品,X軸轉轉轉。。。。。。"; } function YRotate() { echo "您好,我是XY軸都可旋轉產品,Y軸轉轉轉。。。。。。"; } } /**工廠角色 * Class ProductFactory */ class ProductFactory { static function GetInstance($xMax,$yMax) { if($xMax>1 && $yMax===1) { return new XProduct($xMax,$yMax); } elseif($xMax===1 && $yMax>1) { return new YProduct($xMax,$yMax); } elseif($xMax>1 && $yMax>1) { return new XYProduct($xMax,$yMax); } else { return null; } } }

         測試代碼:

<?php /** * Created by PhpStorm. * User: Jiang * Date: 2015/4/9 * Time: 21:54 */ require_once "./SimpleFactory/SimpleFactory.php"; header("Content-Type:text/html;charset=utf⑻"); $pro=array(); $pro[]=ProductFactory::GetInstance(1,12); $pro[]=ProductFactory::GetInstance(12,1); $pro[]=ProductFactory::GetInstance(12,12); $pro[]=ProductFactory::GetInstance(0,12); foreach($pro as $v) { if($v) { echo "<br/>"; $v->XRotate(); echo "<br/>"; $v->YRotate(); } else { echo "非法產品!<br/>"; } echo "<hr/>"; }

      用閱讀器訪問測試代碼,我們可以發現創建的對象順次是YProduct,XProduct,XYProduct,null。簡單工廠的核心代碼在于工廠(ProductFactory)這個角色,這里根據傳入的xMax與yMax值去創建不同的對象,這便是簡單工廠的實質,而且我們在測試調用客戶端根本不知道具體的產品類是甚么樣,這樣就做到了調用與創建的分離。


       簡單工廠的優點:讓對象的調用者和對象創建進程分離,當對象調用者需要對象時,直接向工廠要求便可。從而避免了對象的調用者與對象的實現類以硬編碼方式耦合,以提高系統的可保護性、可擴大性。

       簡單工廠的缺點:當產品修改時,工廠類也要做相應的修改,比如要增加1種操作類,如求M數的N次方,就得改case,修改原有類,背背了開放-封閉原則

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 亚洲爱爱久久精品 | 国产福利精品在线 | 欧美大陆日韩 | 欧美精品v欧洲精品 | 欧洲美女粗暴交视频 | 国产高清不卡一区二区三区 | 国产成+人欧美+综合在线观看 | 日本欧美一区二区三区不卡视频 | 一本大道高清香蕉中文大在线 | 国产精品第一页在线观看 | 青青青青在线成人视99 | 性欧美视频videos6一9 | 日本欧美一区二区三区高清 | 性欧美16sex性高清播放 | 国产成人欧美 | 亚洲午夜伦理 | 欧美大屁股精品毛片视频 | 午夜小影院 | 国产日韩一区二区三区在线观看 | 无码精品一区二区三区免费视频 | 91在线精品亚洲一区二区 | 亚洲黄色在线 | 午夜理伦三级理论三级60 | 免费jizz在线播放视频 | 中文字幕精品一区二区2021年 | 欧美在线一级视频 | 波多野结衣被强在线视频 | 福利视频一二区 | 国产亚洲欧美在线播放网站 | 国产精品久久久久久久久久久不卡 | 2020国产精品自拍 | www.伊人| 国产91精品一区二区 | 午夜老司机永久免费看片 | 精品日韩一区二区三区视频 | 亚洲一区日韩一区欧美一区a | 真实国产乱人伦在线视频播放 | 亚洲一区精品中文字幕 | 日韩大片免费在线观看 | 一区二区三区鲁丝不卡麻豆 | 欧美性色欧美a在线播放 |