摘要:支持增加任意產(chǎn)品抽象工廠用來生產(chǎn)不同產(chǎn)品族的全部產(chǎn)品。對(duì)于增加新的產(chǎn)品,無能為力支持增加產(chǎn)品族參考系列源地址系列目錄設(shè)計(jì)模式概述設(shè)計(jì)模式一簡(jiǎn)單工廠模式設(shè)計(jì)模式二工廠方法模式設(shè)計(jì)模式三抽象工廠模式設(shè)計(jì)模式四單例模式
一、什么是抽象工廠模式
抽象工廠模式的用意為:給客戶端提供一個(gè)接口,可以創(chuàng)建多個(gè)產(chǎn)品族中的產(chǎn)品對(duì)象 ,而且使用抽象工廠模式還要滿足以下條件:
系統(tǒng)中有多個(gè)產(chǎn)品族,而系統(tǒng)一次只可能消費(fèi)其中一族產(chǎn)品。
同屬于同一個(gè)產(chǎn)品族的產(chǎn)品可以使用。
產(chǎn)品族:位于不同產(chǎn)品等級(jí)結(jié)構(gòu)中,功能相關(guān)聯(lián)的產(chǎn)品組成的家族。下面例子的 汽車和空調(diào)就是兩個(gè)產(chǎn)品樹, 奔馳C200+格力某型號(hào)空調(diào)就是一個(gè)產(chǎn)品族, 同理, 奧迪A4+海爾某型號(hào)空調(diào)也是一個(gè)產(chǎn)品族。
二、類圖 三、案例// 汽車(抽象產(chǎn)品接口) interface AutoProduct { public function dirve(); } //奧迪A4(具體產(chǎn)品類) class AudiA4Product implements AutoProduct { //獲取汽車名稱 public function dirve() { echo "開奧迪A4"."
"; } } //奔馳C200(具體產(chǎn)品類) class BenzC200Product implements AutoProduct { //獲取汽車名稱 public function dirve() { echo "開奔馳C200"."
"; } }
//空調(diào)(抽象產(chǎn)品接口) interface AirCondition { public function blow(); } //格力空調(diào)某型號(hào)(具體產(chǎn)品類) class GreeAirCondition implements AirCondition { public function blow() { echo "吹格力空調(diào)某型號(hào)"."
"; } } //海爾空調(diào)某型號(hào)(具體產(chǎn)品類) class HaierAirCondition implements AirCondition { public function blow() { echo "吹海爾空調(diào)某型號(hào)"."
"; } }
//工廠接口 interface Factory { public function getAuto(); public function getAirCondition(); } //工廠A = 奧迪A4 + 海爾空調(diào)某型號(hào) class AFactory implements Factory { //汽車 public function getAuto() { return new AudiA4Product(); } //空調(diào) public function getAirCondition() { return new HaierAirCondition(); } }
//工廠B = 奔馳C200 + 格力空調(diào)某型號(hào) class BFactory implements Factory { //汽車 public function getAuto() { return new BenzC200Product(); } //空調(diào) public function getAirCondition() { return new GreeAirCondition(); } }
//客戶端測(cè)試代碼 $factoryA = new AFactory(); $factoryB = new BFactory(); //A工廠制作車 $auto_carA = $factoryA->getAuto(); $auto_airA = $factoryA->getAirCondition(); //B工廠制作車 $auto_carB = $factoryB->getAuto(); $auto_airB = $factoryB->getAirCondition(); //開奧迪車+吹海爾空調(diào) $auto_carA->dirve(); $auto_airA->blow(); //熱的時(shí)候可以吹吹空調(diào) //開奔馳車+吹格力空調(diào); $auto_carB->dirve(); $auto_airB->blow(); //熱的時(shí)候可以吹吹空調(diào)四、抽象工廠模式的組成
抽象工廠(AbstractFactory):確定工廠的業(yè)務(wù)范圍。
具體工廠(ConcreteFactory):每個(gè)具體工廠對(duì)應(yīng)一個(gè)產(chǎn)品族。具體工廠決定生產(chǎn)哪個(gè)具體產(chǎn)品對(duì)象。
抽象產(chǎn)品(AbstractProduct):同一產(chǎn)品等級(jí)結(jié)構(gòu)的抽象類。
具體產(chǎn)品(ConcreteProduct):可供生產(chǎn)的具體產(chǎn)品。
工廠方法模式:一個(gè)抽象產(chǎn)品類,可以派生出多個(gè)具體產(chǎn)品類。
一個(gè)抽象工廠類,可以派生出多個(gè)具體工廠類。
每個(gè)具體工廠類只能創(chuàng)建一個(gè)具體產(chǎn)品類的實(shí)例。
抽象工廠模式:多個(gè)抽象產(chǎn)品類,每個(gè)抽象產(chǎn)品類可以派生出多個(gè)具體產(chǎn)品類。
一個(gè)抽象工廠類,可以派生出多個(gè)具體工廠類。
每個(gè)具體工廠類可以創(chuàng)建多個(gè)具體產(chǎn)品類的實(shí)例。
三種工廠的比較簡(jiǎn)單工廠 :用來生產(chǎn)同一等級(jí)結(jié)構(gòu)中的任意產(chǎn)品。(對(duì)于增加新的產(chǎn)品,無能為力)
工廠方法 :用來生產(chǎn)同一等級(jí)結(jié)構(gòu)中的固定產(chǎn)品。(支持增加任意產(chǎn)品)
抽象工廠 :用來生產(chǎn)不同產(chǎn)品族的全部產(chǎn)品。(對(duì)于增加新的產(chǎn)品,無能為力;支持增加產(chǎn)品族)
參考 系列源地址WilburXu/design_pattern
系列目錄PHP 設(shè)計(jì)模式概述
PHP設(shè)計(jì)模式(一)簡(jiǎn)單工廠模式 (Simple Factory For PHP)
PHP設(shè)計(jì)模式(二)工廠方法模式(Factory Method)
PHP設(shè)計(jì)模式(三)抽象工廠模式(Abstract Factory)
PHP設(shè)計(jì)模式(四)單例模式(Singleton)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/29506.html
摘要:對(duì)于這個(gè)問題,接下來的工廠方法模式可以解決這個(gè)問題。二工廠方法模式的優(yōu)點(diǎn)擁有良好的封裝性,代碼結(jié)構(gòu)清晰。參考系列源地址系列目錄設(shè)計(jì)模式概述設(shè)計(jì)模式一簡(jiǎn)單工廠模式設(shè)計(jì)模式二工廠方法模式設(shè)計(jì)模式三抽象工廠模式設(shè)計(jì)模式四單例模式 簡(jiǎn)單工廠簡(jiǎn)述: 簡(jiǎn)單工廠模式實(shí)現(xiàn)了產(chǎn)品類的代碼跟客戶端代碼分離,但會(huì)有一個(gè)問題,優(yōu)秀的代碼是符合開閉原則如果你要加一個(gè)C類產(chǎn)品,你就要修改工廠類里面的代碼,也就是說...
摘要:工廠模式使一個(gè)類的實(shí)例化延遲到其子類。參考系列源地址系列目錄設(shè)計(jì)模式概述設(shè)計(jì)模式一簡(jiǎn)單工廠模式設(shè)計(jì)模式二工廠方法模式設(shè)計(jì)模式三抽象工廠模式設(shè)計(jì)模式四單例模式 一、什么是簡(jiǎn)單工廠模式 簡(jiǎn)單工廠 (Simple Factory)又稱靜態(tài)工廠方法模式(Static Factory Method Pattern) 使用的頻率可以說是非常之高,它的官方解釋為:定義一個(gè)用于創(chuàng)建對(duì)象的接口,讓子...
摘要:創(chuàng)建型模式主要有以下五種簡(jiǎn)單工廠模式和工廠方法模式抽象工廠模式單例模式建造者模式原型模式在設(shè)計(jì)模式一書中將工廠模式分為兩類工廠方法模式與抽象工廠模式。 一、 設(shè)計(jì)模式(Design pattern)是什么 設(shè)計(jì)模式是一套被反復(fù)使用、多數(shù)人知曉、經(jīng)過分類編目的代碼設(shè)計(jì)的經(jīng)驗(yàn)總結(jié)。使用設(shè)計(jì)模式是為了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性。 二、 為什么會(huì)有設(shè)計(jì)模式 在軟件開發(fā)過...
摘要:反射提供給面向?qū)ο缶幊炭梢宰允〉哪芰?,即反射。在?jiǎn)單工廠模式中,根據(jù)傳遞的參數(shù)來返回不同的類的實(shí)例簡(jiǎn)單工廠模式又稱為靜態(tài)工廠方法模式。也就是簡(jiǎn)單工廠模式工廠工廠類。PHP高級(jí)特性-反射以及工廠設(shè)計(jì)模式的結(jié)合使用 [結(jié)合 Laravel-Admin 代碼實(shí)例講解]利用反射來實(shí)現(xiàn)工廠模式的生產(chǎn)而無需創(chuàng)建特定的工廠類本文地址http://janrs.com/?p=833轉(zhuǎn)載無需經(jīng)過作者本人授權(quán)轉(zhuǎn)載...
摘要:工廠模式工廠模式代碼片段訪問靜態(tài)屬性要加符靜態(tài)方法生成實(shí)例對(duì)象,作為函數(shù)的參數(shù)工廠就是負(fù)責(zé)生成對(duì)象的類或方法工廠模式,是把創(chuàng)造者類和要生產(chǎn)的類分開,創(chuàng)建者是個(gè)工廠類,定義了用于生產(chǎn)產(chǎn)品對(duì)象的方法行程特殊的代碼重復(fù),不必要的子類話,為了工 工廠模式 /* 工廠模式代碼片段*/ class Employee{ private static $type = array(minio...
閱讀 3344·2021-11-19 11:36
閱讀 2949·2021-09-27 13:34
閱讀 2007·2021-09-22 15:17
閱讀 2418·2019-08-30 13:49
閱讀 768·2019-08-26 13:58
閱讀 1368·2019-08-26 10:47
閱讀 2549·2019-08-23 18:05
閱讀 610·2019-08-23 14:25