抽象工廠模式:
先來認識下什麼是產品族: 位於不同產品等級結構中,功能相關聯的產品組成的家族。
圖中的bmwcar和benzcar就是兩個產品樹(產品等級結構);而如圖所示的benzsportscar和bmwsportscar就是乙個產品族。他們都可以放到跑車家族中,因此功能有所關聯。同理bmwbussinesscar和benzbusinesscar也是乙個產品族。
可以這麼說,它和工廠方法模式的區別就在於需要建立物件的複雜程度上。而且抽象工廠模式是三個裡面最為抽象、最具一般性的。抽象工廠模式的用意為:給客戶端提供乙個介面,可以建立多個產品族中的產品物件。
而且使用抽象工廠模式還要滿足一下條件:
1.系統中有多個產品族,而系統一次只可能消費其中一族產品
2.同屬於同乙個產品族的產品以其使用。
來看看抽象工廠模式的各個角色(和工廠方法的如出一轍):
抽象工廠角色: 這是工廠方法模式的核心,它與應用程式無關。是具體工廠角色必須實現的介面或者必須繼承的父類。它由抽象類或者介面來實現。
具體工廠角色:它含有和具體業務邏輯有關的**。由應用程式呼叫以建立對應的具體產品的物件。
抽象產品角色:它是具體產品繼承的父類或者是實現的介面。一般有抽象類或者介面來實現。
具體產品角色:具體工廠角色所建立的物件就是此角色的例項。由具體的類來實現。
(1)driver.class.php(抽象父類,用於規範子類實現)
<?php
namespace factory\abstractfactory;
abstract class driver
(2)benzcar.class.php(抽象父類,用於規範子類實現)
<?php
namespace factory\abstractfactory;
abstract class benzcar
(3)benzsportcar.class.php(具體實現類)
<?php
namespace factory\abstractfactory;
class benzsportcar extends benzcar
}
(4)benzbusinesscar(具體實現類)
<?php
namespace factory\abstractfactory;
class benzbusinesscar extends benzcar
}
(5)bwmcar.class.php(抽象父類,用於規範子類實現)
<?php
namespace factory\abstractfactory;
abstract class bwmcar
(6)bwmsport.class.php(具體實現類)
<?php
namespace factory\abstractfactory;
class bwmsportcar extends benzcar
}
(7)bwmbusiness.class.php
<?php
namespace factory\abstractfactory;
class bwmbusinesscar extends benzcar
}
(8)businessdriver.class.php(具體產品族實現類)
<?php
namespace factory\abstractfactory;
class businessdriver extends driver
public function driverbwmcar()
}
(9)sportdriver.class.php(具體產品族實現類)
<?php
namespace factory\abstractfactory;
class sportdriver extends driver
public function driverbwmcar()
}
(10)客戶端類
<?php
spl_autoload_register(function ($classname));
use factory\abstractfactory\sportdriver;
$type = new sportdriver();
$car = $type->driverbwmcar();
$string = $car->drive();
echo $string;
設計模式之工廠 抽象工廠
一 應用場景 工廠模式應用非常廣泛,意在抽象出一層專職管理物件產生以及物件間的關係,讓我們能夠專注於業務開發 1.不用去寫許許多多的new方法,替換實現類還得挨個修改。2.類中不涉及實現類,物件間只存在介面級別的耦合,客戶端呼叫注入實現類即可。由於工廠模式變種非常多,這裡只講一下常用的簡單工廠和抽象...
抽象工廠模式 設計模式3之抽象工廠模式
工廠方法模式中工廠只負責同類產品的生產。比如電視機工廠不應該生產汽車。然而現實生活中有很多綜合型的工廠,比如有些電視工廠不僅生產電視機,還會生產與之配套的機頂盒。那麼抽象工廠模式隨之誕生,這種模式將考慮多種型別產品的生產。我們總結下 工廠方法模式只考慮成產同一等級級的產品抽象方法模式考慮生產多等級的...
設計模式4 3 工廠模式之抽象工廠
在我們的示例中,materialfactory是抽象工廠的抽象類,它定義了建立water和rawnoodles這兩個同屬乙個家族的物件的方法。在具體的工廠類中,每乙個物件的建立都使用工廠方法的方式建立。抽象工廠類和具體工廠類 abstract class materialfactory class ...