PHP設計模式 工廠方法

2021-07-01 20:46:30 字數 2673 閱讀 2360

宣告:本系列部落格參考資料《大話設計模式》,作者程杰。

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

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

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

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

抽象工廠角色(iserve***ctory):是工廠方法模式的核心,與應用程式無關。任何在模式中建立的物件的工廠類必須實現這個介面。

具體工廠角色(chickenlegbaofactory):這是實現抽象工廠介面的具體工廠類,包含與應用程式密切相關的邏輯,並且受到應用程式呼叫以建立產品物件。

抽象產品角色(ihanbao):工廠方法模式所建立的物件的超型別,也就是產品物件的共同父類或共同擁有的介面。

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

根據以上uml類圖和角色編寫以下php**:

<?php 

/** * created by phpstorm.

* user: jiang

* date: 2015/4/16

* time: 22:12

*//**抽象產品角色 漢堡

* inte***ce ihanbao

*/inte***ce ihanbao

/**具體產品角色 肉鬆漢堡

* class rousongbao

*/class rousongbao implements ihanbao

}/**雞肉漢堡

* class chickenbao

*/class chickenbao implements ihanbao

}/**抽象工廠角色

* inte***ce iserve***ctory

*/inte***ce iserve***ctory

/**具體工廠角色 肉鬆漢堡工廠

* class rousongfactory

*/class rousongfactory implements iserve***ctory

}class chickenfactory implements iserve***ctory

}

測試**:

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.管理上的難度

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

php物件導向設計模式

PHP設計模式 簡單工廠方法

簡介 簡單工廠模式是屬於建立型模式,又叫做靜態工廠方法 static factory method 模式,但不屬於23種gof設計模式之一。簡單工廠模式是由乙個工廠物件決定建立出哪一種產品類的例項。簡單工廠模式是工廠模式家族中最簡單實用的模式,可以理解為是不同工廠模式的乙個特殊實現。優缺點 優點 工...

PHP設計模式之工廠方法模式

以下文字部分均為本人自己的想法與總結所以未必正確 部分摘錄自 工廠方法模式 優點 彌補了簡單工廠的確點,即當要修改類的時候工廠類也需要做出相對應的更改。之所以可以解決簡單工廠的問題,是因為工廠方法模式把具體產品的建立推遲到工廠類的子類 具體工廠 中,此時工廠類不再負責所有產品的建立,而只是給出具體工...

php工廠方法模式

clevercode最近在看工廠方法模式。定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類,工廠方法使乙個類的例項化延遲到其子類。2.1 抽象工廠 creator 角色 是工廠方法模式的核心,與應用程式無關。任何在模式中建立的物件的工廠類必須實現這個介面。2.2 具體工廠 concrete cr...