php實現抽象工廠模式
設計模式-使用php實現抽象工廠模式
【概要】
建立型模式
抽象工廠模式提供一個建立一系統相關或相互依賴物件的介面,而無需指定它們具體的類【GOF95】
【特點】
抽象工廠模式(Abstact Factory)是一種常見的軟體設計模式。該模式為一個產品族提供了統一的建立介面。當需要這個產品族的某一系列的時候,可以為此係列的產品族建立一個具體的工廠類。
【結構圖】
【主要角色】
抽象工廠(Abstract Factory)角色:它宣告一個建立抽象產品物件的介面。通常以介面或抽象類實現,所有的具體工廠類必須實現這個介面或繼承這個類。
具體工廠(Concrete Factory)角色:實現建立產品物件的操作。客戶端直接呼叫這個角色建立產品的例項。這個角色包含有選擇合適的產品物件的邏輯。通常使用具體類實現。
抽象產品(Abstract Product)角色:宣告一類產品的介面。它是工廠方法模式所建立的物件的父類,或它們共同擁有的介面。
具體產品(Concrete Product)角色:實現抽象產品角色所定義的介面,定義一個將被相應的具體工廠建立的產品物件。其內部包含了應用程式的業務邏輯。
【優缺點】
抽象工廠模式的優點:
1、分離了具體的類
2、使增加或替換產品族變得容易
3、有利於產品的一致性
抽象工廠模式的缺點:
難以支援新種類的產品。這是因為AbstractFactory介面確定了可以被建立的產品集合。支援新各類的產品就需要擴充套件訪工廠介面,從而導致AbstractFactory類及其所有子類的改變。
抽象工廠就是以一種傾斜的方式支援增加新的產品中,它為新產品族的增加提供了方便,而不能為新的產品等級結構的增加提供這樣的方便。
【適用性】
1、一個系統不應當依賴於產品類例項如何被建立、組合和表達的細節,這對於所有形態的工廠模式都是重要的。
2、這個系統的產品有多於一個的產品族,而系統只消費其中某一族的產品。
3、 同屬於同一個產品族的產品是在一起使用的,這一約束必須在系統的設計中體現出來。
4、系統提供一個產品類的庫,所有的產品以同樣的介面出現,從而使用客戶端不依賴於實現
【抽象工廠模式php例項】
<?php
/**
* 抽象工廠模式
* -------------
* @author zhaoxuejie <zxj198468@gmail.com>
* @package design pattern
* @version v1.0 2011-12-14
*/
//抽象工廠
interface AnimalFactory {
public function createCat();
public function createDog();
}
//具體工廠
class BlackAnimalFactory implements AnimalFactory {
function createCat(){
return new BlackCat();
}
function createDog(){
return new BlackDog();
}
}
class WhiteAnimalFactory implements AnimalFactory {
function createCat(){
return new WhiteCat();
}
function createDog(){
return new WhiteDog();
}
}
//抽象產品
interface Cat {
function Voice();
}
interface Dog {
function Voice();
}
//具體產品
class BlackCat implements Cat {
function Voice(){
echo '黑貓喵喵……';
}
}
class WhiteCat implements Cat {
function Voice(){
echo '白貓喵喵……';
}
}
class BlackDog implements Dog {
function Voice(){
echo '黑狗汪汪……';
}
}
class WhiteDog implements Dog {
function Voice(){
echo '白狗汪汪……';
}
}
//客戶端
class Client {
public static function main() {
self::run(new BlackAnimalFactory());
self::run(new WhiteAnimalFactory());
}
public static function run(AnimalFactory $AnimalFactory){
$cat = $AnimalFactory->createCat();
$cat->Voice();
$dog = $AnimalFactory->createDog();
$dog->Voice();
}
}
Client::main();
?>
相關文章
- Python 實現工廠模式、抽象工廠,單例模式Python模式抽象單例
- 工廠模式 抽象模式模式抽象
- 抽象工廠模式抽象模式
- 簡單工廠模式、工廠模式、抽象工廠模式比較模式抽象
- 簡單工廠模式和抽象工廠模式模式抽象
- 建立型:工廠模式-工廠方法、抽象工廠模式抽象
- java 抽象工廠模式Java抽象模式
- 06: 抽象工廠模式抽象模式
- 設計模式-簡單工廠、工廠方法模式、抽象工廠模式設計模式抽象
- 設計模式——抽象工廠實驗設計模式抽象
- 設計模式之工廠方法模式|抽象工廠模式設計模式抽象
- 抽象工廠模式-與-工廠方法模式區別抽象模式
- 一篇搞定工廠模式【簡單工廠、工廠方法模式、抽象工廠模式】模式抽象
- 簡單工廠、工廠方法和抽象工廠模式抽象模式
- 設計模式——抽象工廠模式設計模式抽象
- 設計模式 —— 抽象工廠模式設計模式抽象
- 設計模式-抽象工廠模式設計模式抽象
- 建立型模式——抽象工廠模式模式抽象
- 設計模式學習(二)工廠模式——抽象工廠模式設計模式抽象
- C# 設計模式(1)——簡單工廠模式、工廠模式、抽象工廠模式C#設計模式抽象
- 工廠方法模式與抽象工廠模式的區別模式抽象
- 【Python】抽象工廠模式Python抽象模式
- 設計模式----抽象工廠設計模式抽象
- 設計模式 – 抽象工廠設計模式抽象
- 建立型模式:抽象工廠模式抽象
- 設計模式 - 抽象工廠設計模式抽象
- 抽象工廠模式(C#)抽象模式C#
- 04_抽象工廠模式抽象模式
- Java抽象工廠模式案例Java抽象模式
- 工廠三兄弟之抽象工廠模式(二)抽象模式
- 工廠三兄弟之抽象工廠模式(一)抽象模式
- 設計模式之工廠模式!深入解析簡單工廠模式,工廠方法模式和抽象工廠模式設計模式抽象
- Java 設計模式之工廠方法模式與抽象工廠模式Java設計模式抽象
- 簡單工廠模式、工廠方法模式和抽象工廠模式有何區別?模式抽象
- java設計模式–抽象工廠模式Java設計模式抽象
- Java設計模式-抽象工廠模式Java設計模式抽象
- 設計模式系列·抽象工廠模式設計模式抽象
- 設計模式(十三)抽象工廠模式設計模式抽象