前面的文章程式設計客棧說了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 的材料.抽象工廠模式 提供乙個建立一系列相關或...