宣告:本系列部落格參考資料《大話設計模式》,作者程杰。
前面我們介紹了簡單工廠,今天我們繼續學習另外乙個工廠——工廠方法。
具體案例:請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...