日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

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

PHP設計模式――簡單工廠

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

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


        前面兩節內容介紹了甚么是設計模式和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,修改原有類,背背了開放-封閉原則

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 国产成人综合在线 | 午夜av一区 | 一级片免费视频 | 国产精品久久久久久婷婷天堂 | 99re在线观看 | 91看片在线免费观看 | 久久成人高清 | 美女黄网| 经典三级第一页 | 91精品久久久久久久 | 久久久久成人精品 | 久久久久一区二区 | 亚洲国产一区二区在线 | 日本视频在线播放 | 欧美一级毛片免费的视频 | 国产午夜精品久久久 | 欧美一区二区在线看 | 日本一二区不卡 | 91久久国产综合久久91精品网站 | 九九自拍 | 欧美视频导航 | 暖暖av | 亚洲综合视频 | 国产日韩精品在线 | 国产一区二区在线观看免费视频 | 亚洲高清av在线 | 国产一区二区三级 | 色综合久久88色综合天天 | 欧美在线二区 | 欧美一区二区三区四区在线观看 | 国产在线精品一区 | 91精品入口 | 国产a一区 | 红桃成人av在线播放 | 国产伦精品一区二区三区在线 | 成人精品在线 | 亚洲视频欧美视频 | 婷婷综合网| 日操| 91精品一区二区三区蜜桃 | 国产精品久久一区二区三区 |