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