學習php設計模式 php實現抽象工廠模式

2022-10-06 09:57:07 字數 2441 閱讀 8341

抽象工廠模式(abstact factory)是一種常見的軟體設計模式。該模式為乙個產品族提供了統一的建立介面。當需要這個產品族的某一系列的時候,可以為此系列的產品族建立乙個具體的工廠類。

一、意圖

抽象工廠模式提供乙個建立一系統相關或相互依賴物件的介面,而無需指定它們具體的類【gof95】

二、抽象工廠模式結構圖

三、抽象工廠模式中主要角色

抽象工廠(abstract factory)角色:它宣告乙個建立抽象產品物件的介面。通常以介面或抽象類實現,所有的具體工廠類必須實現這個介面或繼承這個類。

具體工廠(concrete factory)角色:實現建立產品物件的操作。客戶端直接呼叫這個角色建立產品的例項。這個角色包含有選擇合適的產品物件的邏輯。通常使用具體類實現。

抽象產品(abstract product)角色:宣告一類產品的介面。它是工廠方法模式所建立的物件的父類,或它們共同擁有的介面。

具體產品(concrete product)角色:實現抽象產品角色所定義的介面,定義乙個將被相應的具體工廠建立的產品物件。其內部包含了應用程式的業務邏輯。

四、抽象工廠模式的優缺點

抽象工廠模式的優點:

1、分離了具體的類

2、使增加或替換產品族變得容易

3、有利於產品的一致性

抽象工廠模式的缺點: 難以支援新種類的產品。這是sqtuwmva因為abstractfactory介面確定了可以被建立的產品集合。支援新各類的產品就需要擴充套件訪工廠介面,從而導致abstractfactory類及其所有子類的改變。

抽象工廠就是以一種傾斜的方式支援增加新的產品中,它為新產品族的增加提供了方便,而不能為新的產品等級結構的增加提供這樣的方便。

五、抽象工廠模式適用場景

以下情況應當使用抽象工廠模式:

1、乙個系統不應當依賴於產品類例項如何被建立、組合和表達的細節,這對於所有形態的工廠模式都是重要的。

2、這個系統的產品有多於乙個的產品族,而系統只消費其中某一族的產品。

3、 同屬於同乙個產品族的產品是在一起使用的,這一約束必須在系統的設計中體現出來。

4、系統提供乙個產品類的庫,所有的產品以同樣的介面出現,從而使用客戶端不依賴於實現

六、抽象工廠模式與其它模式

單例模式(singleton模式):具體工廠類可以設計成單例類,由於工廠通常有乙個就可以,因此具體工廠子類一般都實現為乙個singleton。

工廠方法模式(factory method模式):抽象工廠建立產品的方法定義為工廠方法。

原型模式程式設計客棧(prototype模式):如果有多個可能的產品系列,具體的工廠也可以使用原型模式,具體工廠使用產品系列中

每乙個產品的原型進行例項化並且通過複製它的原型來建立新的產品。

七、抽象工廠模式php示例

<?php /**

* 抽象工廠

*/inte***ce abstractfactory

/*** 具體工廠1

*/class concretefactory1 implements abstractfactory

public function createproductb() }

/*** 具體工廠2

*/class concretefactory2 implements abstractfactory

public function createproductb() }

/** * 抽象產品a

*/intwww.cppcns.come***ce abstractproducta

/*** 抽象產品b

*/inte***ce abstractproductb

/*** 具體產品a1

*/class producta1 implements abstractproducta

public function getname() }

/*** 具體產品a2

*/class producta2 implements abstractproducta

public function getname() }

/**程式設計客棧 * 具體產品b1

*/class productb1 implements abstractproductb

public function getname() }

/** * 具體產品b2

*/class productb2 implements abstractproductb

public function getname() }

/*** 客戶端

*/class client

/*** 呼叫工廠例項生成產品,輸出產品名

* @param $factory abstractfactory 工廠例項

*/ public static function run(abstractfactory $factory) }

client::main();

?>

設計模式 PHP實現多例模式

你可以在這裡檢視並fork源 github 上面我們講解了單例模式。多例模式,顧名思義是具有多個例項的設計模式,每個例項自身建立和管理。下面用php 實現多例模式 php7 多例模式 乙個類有多個相同的例項,每個例項自身建立和管理 link author new1024kb since 2020 0...

php實現多選項,PHP設計模式 多例模式

一 模式定義 多例模式和單例模式類似,但可以返回多個例項。比如我們有多個資料庫連線,mysql sqlite postgres,又或者我們有多個日誌記錄器,分別用於記錄除錯資訊和錯誤資訊,這些都可以使用多例模式實現。二 uml類圖 三 示例 multiton.php namespace design...

php設計 PHP常用設計模式

1 單例模式指在整個應用中只有乙個物件例項的設計模式 class single public rand static private instance 類直接呼叫 final private function construct private防止外部new this rand mt rand 1,...