程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> PHP設計模式——簡單工廠

PHP設計模式——簡單工廠

編輯:關於PHP編程

PHP設計模式——簡單工廠


 

前面兩節內容介紹了什麼是設計模式以及六大原則,相信看完前兩節內容大家對設計模式已經有了初步的認識,接下來說一下設計模式的分類。

 

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

 

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

 

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

 

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

 

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

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

 

 

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

 

\

角色及職責:

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

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

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

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

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

 

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;
        }
    }
}


測試代碼:

 

 

;
        $v->XRotate();
        echo 
;
        $v->YRotate();
    }
    else
    {
        echo 非法產品!
;
    }
    echo 

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

 

 

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

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved