摘要:根據抽象程度的不同,工廠模式分為三種簡單工廠模式工廠方法模式抽象工廠模式講解簡單工廠模式簡單工廠模式又稱靜態工廠方法模式,之所以可以這么說,是因為簡單工廠模式是通過一個靜態方法來創建對象的。他可以解決簡單工廠模式中的封閉開放原則問題。
概念
工廠模式是我們最常用的實例化對象模式,是用工廠方法代替new操作的一種模式。
使用工廠模式的好處是,如果你想要更改所實例化的類名等,則只需更改該工廠方法內容即可,不需逐一尋找代碼中具體實例化的地方(new處)修改了。為系統結構提供靈活的動態擴展機制,減少了耦合。
根據抽象程度的不同,PHP工廠模式分為三種:
簡單工廠模式
工廠方法模式
抽象工廠模式
講解 簡單工廠模式簡單工廠模式又稱靜態工廠方法模式,之所以可以這么說,是因為簡單工廠模式是通過一個靜態方法來創建對象的。
代碼示例:
"; } } /** * Class women 繼承people的女人類 */ class women implements people { // 具體實現people的say方法 public function say() { echo "我是女人
"; } } /** * Class SimpleFactoty 工廠類 */ class SimpleFactoty { // 簡單工廠里的靜態方法-用于創建男人對象 static function createMan() { return new man(); } // 簡單工廠里的靜態方法-用于創建女人對象 static function createWomen() { return new women(); } } /** * 具體調用 */ $man = SimpleFactoty::createMan(); $man->say(); $woman = SimpleFactoty::createWomen(); $woman->say();
運行結果:
我是男人 我是女人工廠方法模式
定義一個用于創建對象的接口,讓子類決定哪個類實例化。 他可以解決簡單工廠模式中的封閉開放原則問題。
看代碼:
"; } } /** * Class women 繼承people的女人類 */ class women implements people { // 實現people的say方法 function say() { echo "我是女人-hi
"; } } /** * Interface createPeople 創建人物類 * 注意:與上面簡單工廠模式對比。這里本質區別在于,此處是將對象的創建抽象成一個接口。 */ interface createPeople { public function create(); } /** * Class FactoryMan 繼承createPeople的工廠類-用于實例化男人類 */ class FactoryMan implements createPeople { // 創建男人對象(實例化男人類) public function create() { return new man(); } } /** * Class FactoryMan 繼承createPeople的工廠類-用于實例化女人類 */ class FactoryWomen implements createPeople { // 創建女人對象(實例化女人類) function create() { return new women(); } } /** * Class Client 操作具體類 */ class Client { // 具體生產對象并執行對象方法測試 public function test() { $factory = new FactoryMan(); $man = $factory->create(); $man->say(); $factory = new FactoryWomen(); $man = $factory->create(); $man->say(); } } // 執行 $demo = new Client; $demo->test();
看結果:
我是男人-hi 我是女人-hi抽象工廠模式
提供一個創建一系列相關或相互依賴對象的接口。
注意:這里和工廠方法的區別是:一系列(多個),而工廠方法只有一個。
代碼:
"; } } /** * Class TwoMan 第二個男人類-繼承people */ class TwoMan implements people{ // 實現people的say方法 public function say() { echo "男2:我看上你了
"; } } /** * Class OneWomen 第一個女人類-繼承people */ class OneWomen implements people { // 實現people的say方法 public function say() { echo "女1:我不喜歡你
"; } } /** * Class TwoWomen 第二個女人類-繼承people */ class TwoWomen implements people { // 實現people的say方法 public function say() { echo "女2:滾一邊玩去
"; } } /** * Interface createPeople 創建對象類 * 注意:這里將對象的創建抽象成了一個接口。 */ interface createPeople { // 創建第一個 public function createOne(); // 創建第二個 public function createTwo(); } /** * Class FactoryMan 用于創建男人對象的工廠類-繼承createPeople */ class FactoryMan implements createPeople { // 創建第一個男人 public function createOne() { return new OneMan(); } // 創建第二個男人 public function createTwo() { return new TwoMan(); } } /** * Class FactoryWomen 用于創建女人對象的工廠類-繼承createPeople */ class FactoryWomen implements createPeople { // 創建第一個女人 public function createOne() { return new OneWomen(); } // 創建第二個女人 public function createTwo() { return new TwoWomen(); } } /** * Class Client 執行測試類 */ class Client { // 具體生成對象和執行方法 public function test() { // 男人 $factory = new FactoryMan(); $man = $factory->createOne(); $man->say(); $man = $factory->createTwo(); $man->say(); // 女人 $factory = new FactoryWomen(); $man = $factory->createOne(); $man->say(); $man = $factory->createTwo(); $man->say(); } } // 執行 $demo = new Client; $demo->test();
結果:
男1:我喜歡你 男2:我看上你了 女1:我不喜歡你 女2:滾一邊玩去總結 區別
簡單工廠模式(靜態方法工廠模式) : 用來生產同一等級結構中的任意產品。(不能增加新的產品)
工廠模式 :用來生產同一等級結構中的固定產品。(支持增加任意產品)
抽象工廠 :用來生產不同產品種類的全部產品。(不能增加新的產品,支持增加產品種類)
適用范圍簡單工廠模式:
工廠類負責創建的對象較少,操作時只需知道傳入工廠類的參數即可,對于如何創建對象過程不用關心。
工廠方法模式:
滿足以下條件時,可以考慮使用工廠模式方法
當一個類不知道它所必須創建對象的類時
一個類希望由子類來指定它所創建的對象時
當類將創建對象的職責委托給多個幫助子類中得某一個,并且你希望將哪一個幫助子類是代理者這一信息局部化的時
抽象工廠模式:
滿足以下條件時,可以考慮使用抽象工廠模式
系統不依賴于產品類實例如何被創建,組合和表達的細節。
系統的產品有多于一個的產品族,而系統只消費其中某一族的產品
同屬于同一個產品族是在一起使用的。這一約束必須在系統的設計中體現出來。
系統提供一個產品類的庫,所有產品以同樣的接口出現,從而使客戶端不依賴于實現。
以上幾種,歸根結底,都是將重復的東西提取出來,以方便整體解耦和復用,修改時方便。可根據具體需求而選擇使用。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/22044.html
摘要:工廠模式其實可以劃分為簡單工廠模式工廠方法模式抽象工廠模式等。簡單工廠模式介紹簡單工廠模式又稱為靜態工廠方法模式,它屬于類創建型模式。此模式是對工廠方法模式的進一步擴展。 你好,是我琉憶,PHP程序員面試筆試系列圖書的作者。 本周(2019.3.11至3.15)的一三五更新的文章如下: 周一:PHP面試常考之設計模式——工廠模式周三:PHP面試常考之設計模式——建造者模式周五:PHP...
摘要:但本質是,簡單工廠并未嚴格遵循設計模式的開閉原則,當需要增加新產品時也需要修改工廠代碼。但是工廠方法則嚴格遵守開閉原則,模式只負責抽象工廠接口,具體工廠交給客戶去擴展。 最近開展了三次設計模式的公開課,現在來總結一下設計模式在PHP中的應用,這是第二篇創建型模式之工廠模式。 設計模式的一般介紹在第一篇文章講了,這里就不重復。 工廠模式 實現:定義一個用于創建對象的接口,讓子類決定實...
摘要:的設計模式有很多種,本文取最簡單的三種模式工廠模式單例模式和注冊樹模式進行簡單的講解。文件創建完后,咱們回到單元測試文件文件再執行一下單元測試命令發現,也能返回成功,這樣的話我們就能很方便的修改任何驅動了。 php 設計模式之工廠模式、單例模式、注冊樹模式 在軟件工程中,創建型設計模式承擔著對象創建的職責,嘗試創建適合程序上下文的對象,對象創建設計模式的產生是由于軟件工程設計的問題,具...
摘要:工廠模式由工廠類根據參數來決定創建出哪一種產品類的實例。工廠類是指包含了一個專門用來創建其他對象的方法的類。工廠模式的最主要作用就是對象創建的封裝簡化創建對象操作。 ### 工廠模式: 由工廠類根據參數來決定創建出哪一種產品類的實例。工廠類是指包含了一個專門用來創建其他對象的方法的類。所謂按需分配,傳入參數進行選擇,返回具體的類。工廠模式的最主要作用就是對象創建的封裝、簡化創建對象操作...
摘要:連接郵件服務器的類可以連接郵件服務器的方法有,此時可以寫一個工廠類負責實例化這幾種連接方法,如果某一天對方增加了連接方法,那么直接在工廠類里做相應的修改即可。擴展性高,如果想增加一個產品,只要擴展一個工廠類或者是修改工廠的生產過程即可。 定義 工廠模式的使用頻率比較高。它的定義為:定義一個類,該類主要負責系統的去實例化一些其它的類。通俗點說就是,你告訴我你需要哪個類的實例即可,其它的你...
閱讀 3783·2021-09-23 11:32
閱讀 2452·2021-09-06 15:01
閱讀 1617·2021-08-18 10:24
閱讀 3450·2019-12-27 11:44
閱讀 3605·2019-08-30 15:52
閱讀 2512·2019-08-30 11:11
閱讀 674·2019-08-29 17:27
閱讀 600·2019-08-29 16:22