PHP設計模式之抽象工廠模式例項分析

2022-09-26 06:15:07 字數 1542 閱讀 3612

前面的文章程式設計客棧說了php下的簡單工廠(靜態工廠) 和工廠模式,現在說一下抽象工廠模式

工廠模式我們已經說過,增加乙個產品很簡單,增加對應的產品類和工廠類,不需要對原有**進行改動,符合開閉原則

現在接著上篇文章,我們又有了新的需求,我們要求蘋果味飲料和香蕉味飲料,有百事和可口可樂兩個品牌,用工廠模式,就實現不了了,我只能增加單一的產品,但是增加品牌我實現不了,引申而出抽象工廠模式,**如下

<?php /**

* created by phpstorm.

* user: tiansi

* date: 18/1/23

* time: 下午5:10

*///工廠介面

inte***ce fruitfactory

//飲料介面

inte***ce fruit

class baishiapplefruit implements fruit

}class baishibananafruit implements fruit

}class coleiapplefruit implements fruit

}class colebananafruit implements fruit

}//百事飲料工廠

class baishifruitfactory implements fruitfactory

func makebananafruit() }

//可口可樂飲料工廠

class colefruitfactory implements fruitfactory

function makebananafruit() }

$baishi_factory = new baishifruitfactory();

$baishi_factory->makeapplefruit()->getfruitname();

echo "

";$baishi_factory->makebananafraahaqcuit()->getfruitname();

echo "

";$cole_factory = new colefruitfactory();

$cole_factory->makeapplefruit()->getfruitname();

echo "

";$cole_factory->makebananafruit()->getfruitname();

執行結果:

百事蘋果味飲料

百事香蕉味飲料

可口可樂蘋果味飲料

可口可樂香蕉味飲料

現在我們可以看到 如果想要再增加乙個品牌的話 只需要再寫乙個工廠類 並寫上對應的產品類 就可以在不改動原有**的前提下 成功增加品牌

但是這會兒想要再增加乙個單一產品,就很麻煩了,需要更改工廠類,這就是工廠和抽象工廠的區別

工廠模式針對於單一產品,乙個產品抽象類,每個工廠只能建立乙個產品,支援擴充套件單個產品,不支援擴充套件產品族,針對乙個產品等級結構

抽象工廠針對於產品族,多個產品抽象類,每個工廠能建立多個產品,支援擴充套件產品族,不支援擴充套件單個產品,針對多個產品等級結構

PHP設計模式 工廠模式之抽象工廠模式

abstract class 2 建立ttd 抽象類 ttd 抽象類 class ttdencoder abstract class ttdencoder 3 建立contact 抽象類 contact 抽象類 class contactencoder abstract class contacte...

php 設計模式之抽象工廠模式

抽象工廠模式 abstact factory 是一種常見的軟體設計模式。該模式為乙個產品族提供了統一的建立介面。當需要這個產品族的某一系列的時候,可以為此系列的產品族建立乙個具體的工廠類。一 意圖 抽象工廠模式提供乙個建立一系統相關或相互依賴物件的介面,而無需指定它們具體的類 gof95 二 抽象工...

php設計模式之抽象工廠

案例 追mm少不了請吃飯了,去麥當勞,只管向服務員說 兩個b 就行了。麥當勞就是b 的abstractfactory,b 裡含有漢堡,雞翅和飲料.麥當勞或肯德基會根據b 的規格,讓漢堡factory,雞翅factory,飲料factory分別生產對應b 的材料.抽象工廠模式 提供乙個建立一系列相關或...