PHP實現抽象工廠設計模式
概述
抽象工廠模式對同一類產品實現了封裝,上層應用(客戶端)只需呼叫相應的工廠介面來建立具體的產品,無需關心產品是如何建立。
特點
對介面的規範化提供很好的一致性和擴充套件性。
工廠角色
要理解抽象工廠設計模式,需要先了解以下概念。(在之後的程式碼中會體現)
抽象工廠:負責定義工廠介面,所有繼承於此工廠的子類(也叫具體工廠)必須實現抽象工廠內定義的介面(或方法)。抽象工廠在php中,可以使用interface或者abstract來定義。interface和abstract都是php內的抽象介面的定義方式,但是兩個函式有不同的應用場景,具體可以參考PHP中的 抽象類(abstract class)和 介面(interface)
具體工廠:負責實現抽象工廠的具體介面,不同的具體工廠均繼承與抽象工廠。由於抽象工廠定義了統一的介面規範,所以可以根據需求實現不同的工廠,從而做出不同的產品供上層應用呼叫。
抽象產品:定義某類產品的介面,所有的具體產品需要繼承此類,並實現該類提供的介面。(使用inteface或abstract定義)
具體產品:實現抽象產品。
以上的4個角色構成了一個完整的抽象工廠設計模式
舉個栗子:
1、水果工廠這類的工廠(抽象工廠),它應該是生產水果的工廠,所以它有個生產水果方法createFruit(),這個就是抽象工廠給我們的概念(程式設計中理解為介面)。
2、水果工廠又分有很多種,比如生產蘋果的工廠、生產香蕉的工廠等等,這些工廠就是具體工廠。當然了,這些工廠肯定是水果工廠,而且肯定是生產水果的(不然都不好意思叫水果工廠),所以這些工廠都要實現水果工廠(抽象工廠)的生產水果方法createFruit()。
3、既然已經有水果生產出來了,那麼這些水果都有相同的屬性,比如名字、重量、顏色、口感等,這就是我們的抽象產品,定義某類產品的介面。
4、具體的產品(例如蘋果、香蕉)則是抽象工廠的最終產物。
具體實現程式碼
/******抽象工廠******/
/**
* 水果類工廠
*/
abstract class FruitFactory
{
abstract public function createFruit();//生產水果方法
}
/******具體工廠******/
//蘋果工廠
class AppleFactory extends FruitFactory
{
public function createFruit()
{
return new Apple();
}
}
//香蕉工廠
class BananaFactory extends FruitFactory
{
public function createFruit()
{
return new Banana();
}
}
/******抽象產品******/
/*水果類產品*/
abstract class Fruit
{
abstract public function name();//水果名
}
/******具體產品******/
/*蘋果*/
class Apple extends Fruit
{
public function name()
{
echo 'i am apple';
}
}
/*香蕉*/
class Banana extends Apple
{
public function name()
{
echo 'i am banana';
}
}
/******測試程式碼******/
//1、我們來到蘋果工廠
$appleFactory = new AppleFactory();
//2、告訴工廠,幫我們造一個蘋果
$apple = $appleFactory->createFruit();
//3、我們得到了一個蘋果,可以使用它
$apple->name();//輸出i am apple
//下面再去香蕉廠
$bananaFactory = new BananaFactory();
$banana = $bananaFactory->createFruit();
$banana->name();//輸出 i am banana
抽象工廠模式優點
- 解耦, 分離了客戶端和類,客戶端只需要去找相應的工廠,則可以得到所需的產品
- 易於擴充套件,當水果廠新增某項功能,或者要為水果這類產品新增某項屬性時,只需要在抽象工廠和抽象產品類中新增相應介面,其繼承者去實現即可。
- 規範化,可保持介面的一致性。
相關推薦
PHP實現抽象工廠設計模式
概述 抽象工廠模式對同一類產品實現了封裝,上層應用(客戶端)只需呼叫相應的工廠介面來建立具體的產品,無需關心產品是如何建立。 特點 對介面的規範化提供很好的一致性和擴充套件性。 工廠角色 要理解抽象工廠設計模式,需要先了解以下概念。(在之後的程式碼
用C# (.NET Core) 實現抽象工廠設計模式
show 技術 例如 mtom src box gif 一起 off 本文的概念性內容來自深入淺出設計模式一書. 上一篇文章講了簡單工廠和工廠方法設計模式 http://www.cnblogs.com/cgzl/p/8760250.html, 使用的是披薩店的例子. 文
設計模式第2篇:簡單工廠、工廠方法、抽象工廠設計模式
1.簡單工廠設計模式 特點:一個抽象的產品類、多個具體的產品類、一個具體的工廠類。 (1)抽象的產品類(例如產品為手機螢幕) public interface Screen{ void screenSize(); } (2)具體的產品類(例如需要5英寸和6英寸的手
Qt下實現簡單工廠設計模式
簡述 簡單工廠設計模式是一種基礎簡單而常用的設計模式,對理解封裝、繼承和多型特性有非常大的幫助。下面就來在Qt下實現簡單工廠模式。 程式碼之路 實現簡單工廠至少需要四個類。其中最主要的兩個類是工廠類和一個基類,另外的類都是這個基類的繼承類。下面的例子中工廠類是factory,基類
python面向物件之抽象工廠設計模式
class truck: def use(self): return "拉貨" def __str__(self): return "大卡車"class minicar: def use(self): return "帶妹兜風" def __s
JAVA抽象工廠設計模式:Abstract Factory
wangking717 寫道 抽象工廠模式:提供一個建立一系列相關活相互依賴物件的介面,而無需指定他們具體的類。 舉2個例子: 1.BOSS要求提供JDBC,Hibernate,Ibatis等多套資料庫操作解決方案,能夠無成本地在這三個解決方案間切換。 2.系統的產品有多於
抽象工廠--設計模式
前面工廠方法模式中考慮的是一類產品的生產, 如畜牧場只管動物、電視機廠只產電視機等. 同種類稱為同等級, 也就是說,工廠方法模式只會考慮生產同等級的產品,但是在現實生活中許多工廠都是綜合性很強的,也會加大工廠的最大使用效率,能夠生產出多等級的產品. 畜牧場可以養動物,也可以養植物等. 本篇部落格將講述抽象工廠
《大話設計模式》c++實現 抽象工廠模式
為了更清晰地理解工廠方法模式,需要先引入兩個概念: 產品等級結構 :產品等級結構即產品的繼承結構,如一個抽象類是電視機,其子類有海爾電視機、海信電視機、TCL電視機,則抽象電視機與具體品牌的電視機之間構成了一個產品等級結構,抽象電視機是父類,而具體品牌的電視機是其子類。
PHP面向對象-設計模式 單例模式 簡單工廠模式 工廠方法模式
單例 nbsp 私有化 {} 意義 pan php代碼 get fun 1.單例模式 單例模式是一種常用的軟件設計模式。在它的核心結構中只包含一個被稱為單例的特殊類。通過單例模式可以保證系統中一個類只有一個實例。即一個類只有一個對象實例。 要實現每一個類只有一個實例
設計模式PHP實現之------委托模式
gpo truct 運行 src .com bin fun body require 委托模式顧名思義就是甲讓乙做事,但乙又讓丙做的,而甲是不知道的。 乙所具有的功能是很方便擴展的。 甲方是使用工具的: JiaFang.php <?php /* Deleg
php設計模式-工廠設計模式
ffffff 調用 很多 接口 body 對象 設計模式 nbsp fff 概念: 工廠設計模式提供獲取某個對象的新實例的一個接口,同時使調用代碼避免確定實際實例化基類步驟。 很多高級模式都是依賴於工廠模式。 php設計模式-工廠設計模式
php設計模式之工廠設計模式
方便 都是 避免 支付寶 高級 acl mage 概念 actor 概念: 工廠設計模式提供獲取某個對象的新實例的一個接口,同時使調用代碼避免確定實際實例化基類步驟。 很多高級模式都是依賴於工廠模式。 好處: PHP中能夠創建基於變量內容的類的
介面設計模式---工廠設計模式(簡單工廠模式、工廠方法模式、抽象工廠模式)代理模式
介面設計模式-------工廠設計模式 工廠設計模式分為簡單設計模式和工廠設計模式。 簡單工廠模式 不想把new 放在主方法 專門定義一個類(第三方)用來建立其他類例項(解耦:抽取出來 ,將客戶端建立物件的操作解耦到外部第三方類),被建立的例項通常具有共同
C++設計模式——工廠方法模式和抽象工廠方法模式
一、工廠方法模式 上面的簡單工廠模式的缺點是當新增產品的時候就要去修改工廠的類,這就違反了開放封閉原則,(類、模組、函式)可以擴充套件,但是不可以修改,於是,就出現了工廠方法模式。所謂工廠方法模式,是指定義一個用於建立物件的介面,讓子類決定例項化哪一個類。 #d
golang實現抽象工廠模式
在專案過程中,遇到某處需要使用工廠模式,因此寫了個測試程式碼進行測試, 首先定義了interface Worker,其中包含一個介面Work(task *string) 然後定義建立Worker的i
Java實現抽象工廠模式+java的反射的機制
Java的反射機制: JAVA反射機制是就是執行的狀態中,對於任意一個類,都能夠知道這個類的所有屬性和方法;對於任意一個物件,都能夠呼叫它的任意一個方法和屬性;這種動態獲取的資訊以及動態呼叫物件
Spring 實現兩種設計模式:工廠模式和單態模式
本文摘自:李剛 著 《輕量級 Java EE企業應用實戰 Struts2+Spring+hibernate整合開發》 在Spring 中大量使用的以下兩種設計模式:工廠模式和單態模式。 工廠模式可將Java 物件的呼叫者從被呼叫者的實現邏輯中分離出來,呼
使用單例和工廠設計模式實現dao實現層的解耦
建立Dao具體例項的工廠: 工廠解耦: 只需在配置檔案中改動,而不需要修改原始碼 各層之間耦合性極低 使用的設計模式: 單例 和 工廠 ***********
C#簡單工廠設計模式實現計算器
一、首先建立PlusOperation類庫,其中包含抽象父類Operation,以及加、減、乘、除四個子類! (1)父類Operation using System; using Syste