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

PHP設計模式——工廠方法

編輯:關於PHP編程

PHP設計模式——工廠方法


 

前面我們介紹了簡單工廠,今天我們繼續學習另外一個工廠——工廠方法。

 

具體案例:請MM去麥當勞吃漢堡,不同的MM有不同的口味,要每個都記住是一件煩人的事情,我們一般采用FactoryMethod模式,帶著MM到服務員那兒,說“要一個漢堡”,具體要什麼樣的漢堡呢,讓MM直接跟服務員說就行了。

工廠方法模式核心工廠類不再負責所有產品的創建,而是將具體創建的工作交給子類去做,成為一個抽象工廠角色,僅負責給出具體工廠類必須實現的接口,而不接觸哪一個產品類應當被實例化這種細節,如下圖:
\

工廠方式模式主要由以下幾種角色組成:

抽象工廠角色(IServerFactory):是工廠方法模式的核心,與應用程序無關。任何在模式中創建的對象的工廠類必須實現這個接口。

具體工廠角色(ChickenLegBaoFactory):這是實現抽象工廠接口的具體工廠類,包含與應用程序密切相關的邏輯,並且受到應用程序調用以創建產品對象。

抽象產品角色(IHanbao):工廠方法模式所創建的對象的超類型,也就是產品對象的共同父類或共同擁有的接口。在上圖中,這個角色是Light。

具體產品角色(ChickenLegBao):這個角色實現了抽象產品角色所定義的接口。某具體產品有專門的具體工廠創建,它們之間往往一一對應。

 

根據以上UML類圖和角色編寫以下PHP代碼:

 

;
    }

}

/**雞肉漢堡
 * Class ChickenBao
 */
class ChickenBao implements IHanbao
{
    function Allay()
    {
        echo I am 雞肉漢堡,小的給主人解餓了!
;
    }

}

/**抽象工廠角色
 * Interface IServerFactory
 */
interface IServerFactory
{
    function MakeHanbao();
}

/**具體工廠角色     肉松漢堡工廠
 * Class RouSongFactory
 */
class RouSongFactory implements IServerFactory
{

    function MakeHanbao()
    {
        return new RouSongBao();
    }
}

class ChickenFactory implements IServerFactory
{

    function MakeHanbao()
    {
        return new ChickenBao();
    }
}

測試代碼:

 

 

header(Content-Type:text/html;charset=utf-8);
//------------------------工廠方式測試代碼------------------
require_once ./FactoryMethod/FactoryMethod.php;

//-----------------餐廳廚師-----------
$chickenFactory=new ChickenFactory();
$rouSongFactory=new RouSongFactory();

//-----------點餐------------
$chicken1=$chickenFactory->MakeHanbao();
$chicken2=$chickenFactory->MakeHanbao();
$rouSong1=$rouSongFactory->MakeHanbao();
$rouSong2=$rouSongFactory->MakeHanbao();

//------------------顧客吃飯---------
$chicken1->Allay();
$chicken2->Allay();
$rouSong1->Allay();
$rouSong2->Allay();

用浏覽器運行測試代碼我們可以發現,顧客都享用了自己的食物。

 

 

工廠方法模式優缺點:

優勢:克服了簡單工廠模式違背開放-封閉的原則,保持了封裝對象創建過程的優點。

缺陷:當增加產品時,就得增加一個產品工廠的類,增加額外的開發量。避免不了分支判斷的問題。

 

簡單工廠模式與工廠方法模式的比較:

 

1. 結構復雜度

簡單工廠模式要占優。簡單工廠模式只需一個工廠類,而工廠方法模式的工廠類隨著產品類個數增加而增加,從而增加了結構的復雜程度。

2.代碼復雜度

代碼復雜度和結構復雜度是一對矛盾,既然簡單工廠模式在結構方面相對簡潔,那麼它在代碼方面肯定是比工廠方法模式復雜的了。簡單工廠模式的工廠類隨著產品類的增加需要增加很多方法(或代碼),而工廠方法模式每個具體工廠類只完成單一任務,代碼簡潔。

3.管理上的難度

假如某個具體產品類需要進行一定的修改,很可能需要修改對應的工廠類。當同時需要修改多個產品類的時候,對工廠類的修改會變得相當麻煩。反而簡單工廠沒有這些麻煩,當多個產品類需要修改是,簡單工廠模式仍然僅僅需要修改唯一的工廠類。

 


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