抽象工廠模式的用意爲:給客戶端提供一個接口,能夠建立多個產品族中的產品對象 ,並且使用抽象工廠模式還要知足如下條件:php
產品族:位於不一樣產品等級結構中,功能相關聯的產品組成的家族。下面例子的 汽車和空調就是兩個產品樹, 奔馳C200+格力某型號空調就是一個產品族, 同理, 奧迪A4+海爾某型號空調也是一個產品族。segmentfault
// 汽車(抽象產品接口) interface AutoProduct { public function dirve(); } //奧迪A4(具體產品類) class AudiA4Product implements AutoProduct { //獲取汽車名稱 public function dirve() { echo "開奧迪A4"."<br>"; } } //奔馳C200(具體產品類) class BenzC200Product implements AutoProduct { //獲取汽車名稱 public function dirve() { echo "開奔馳C200"."<br>"; } }
//空調(抽象產品接口) interface AirCondition { public function blow(); } //格力空調某型號(具體產品類) class GreeAirCondition implements AirCondition { public function blow() { echo "吹格力空調某型號"."<br>"; } } //海爾空調某型號(具體產品類) class HaierAirCondition implements AirCondition { public function blow() { echo "吹海爾空調某型號"."<br>"; } }
//工廠接口 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(); //熱的時候能夠吹吹空調
每一個具體工廠類能夠建立多個具體產品類的實例。設計模式