設計模式 抽象工廠模式

2021-08-21 21:01:31 字數 3571 閱讀 6262

發現工廠方法模式存在乙個嚴重的問題:

而在實際過程中,乙個工廠往往需要生產多類產品。為了解決上述的問題,我們又使用了一種新的設計模式:抽象工廠模式。

抽象工廠模式.jpg

1.1 定義

抽象工廠模式,即abstract factory pattern,提供乙個建立一系列相關或相互依賴物件的介面,而無須指定它們具體的類;具體的工廠負責實現具體的產品例項。

抽象工廠模式與工廠方法模式最大的區別:抽象工廠中每個工廠可以建立多種類的產品;而工廠方法每個工廠只能建立一類

1.2 主要作用

允許使用抽象的介面來建立一組相關產品,而不需要知道或關心實際生產出的具體產品是什麼,這樣就可以從具體產品中被解耦。

1.3 解決的問題

每個工廠只能建立一類產品

工廠方法模式的缺點

2.1 uml類圖

uml類圖

2.2 模式組成

組成(角色)

關係作用

抽象產品族(abstractproduct)

抽象產品的父類

描述抽象產品的公共介面

抽象產品(product)

具體產品的父類

描述具體產品的公共介面

具體產品(concrete product)

抽象產品的子類;工廠類建立的目標類

描述生產的具體產品

抽象工廠(creator)

具體工廠的父類

描述具體工廠的公共介面

具體工廠(concrete creator)

抽象工廠的子類;被外界呼叫

描述具體工廠;實現factorymethod工廠方法建立產品的例項

如何理解抽象產品族、抽象產品和具體產品的區別呢?請看下圖

概念區別.jpg

2.3 使用步驟

步驟1:建立抽象工廠類,定義具體工廠的公共介面;

步驟2:建立抽象產品族類,定義抽象產品的公共介面;

步驟3:建立抽象產品類(繼承抽象產品族類),定義具體產品的公共介面;

步驟4:建立具體產品類(繼承抽象產品類) & 定義生產的具體產品;

步驟5:建立具體工廠類(繼承抽象工廠類),定義建立對應具體產品例項的方法;

步驟6:客戶端通過例項化具體的工廠類,並呼叫其建立不同目標產品的方法建立不同具體產品類的例項

接下來我用乙個例項來對抽象工廠模式進行更深一步的介紹。

3.1 例項概況

即抽象工廠模式

3.2 使用步驟

步驟1:建立抽象工廠類,定義具體工廠的公共介面

abstract class factory
步驟2:建立抽象產品族類,定義具體產品的公共介面;

abstract class abstractproduct
步驟3:建立抽象產品類,定義具體產品的公共介面;

//容器產品抽象類

abstract class containerproduct extends abstractproduct

//模具產品抽象類

abstract class mouldproduct extends abstractproduct

步驟4:建立具體產品類(繼承抽象產品類), 定義生產的具體產品;

//容器產品a類

class containerproducta extends containerproduct

}//容器產品b類

class containerproductb extends containerproduct

}//模具產品a類

class mouldproducta extends mouldproduct

}//模具產品b類

class mouldproductb extends mouldproduct

}

步驟5:建立具體工廠類(繼承抽象工廠類),定義建立對應具體產品例項的方法;

//a廠 - 生產模具+容器產品

class factorya extends factory

@override

public product manufacturemould()

}//b廠 - 生產模具+容器產品

class factoryb extends factory

@override

public product manufacturemould()

}

步驟6:客戶端通過例項化具體的工廠類,並呼叫其建立不同目標產品的方法建立不同具體產品類的例項

//生產工作流程

public class abstractfactorypattern

}

結果:

生產出了容器產品a

生產出了容器產品b

生產出了模具產品a

生產出了模具產品b

簡單工廠模式需要修改工廠類的判斷邏輯

簡單工廠中的工廠類存在複雜的switch邏輯判斷

簡單工廠模式的工廠類使用靜態工廠方法

抽象工廠模式很難支援新種類產品的變化。

這是因為抽象工廠介面中已經確定了可以被建立的產品集合,如果需要新增新產品,此時就必須去修改抽象工廠的介面,這樣就涉及到抽象工廠類的以及所有子類的改變,這樣也就違背了「開發——封閉」原則。

對於新的產品族符合開-閉原則;對於新的產品種類不符合開-閉原則,這一特性稱為開-閉原則的傾斜性。

在了解了優缺點後,我總結了工廠方法模式的應用場景:

設計模式 工廠模式 抽象工廠模式

建立物件時不會對客戶暴露建立邏輯,並且通過使用乙個共同的介面來指向建立的物件。sept1 建立乙個公共介面,將要對外開放的方法在這裡定義。sept2 建立實現介面的類,用即實現對外開放的類的方法 sept3 建立工廠,提供乙個get方法,這個方法提供返回實現類的物件 建立選擇 sept4 使用,建立...

抽象工廠模式 常用設計模式 抽象工廠模式

提供乙個建立一系列相關或相互依賴物件的介面,而無需指定它們具體的類。在工廠方法模式中,我們的具體建立者每次使用都只能建立乙個同型別的物件,假如我們現在需要的是多個不同型別的物件,工廠方法就滿足不了需求了。這時我們可以把多個工廠方法組合到乙個類,這就是抽象工廠模式,它就是專門用來建立多個產品,也可以說...

抽象工廠模式 設計模式(九) 抽象工廠模式

提供乙個為建立一組相關或相互依賴物件的介面,且無須指定它們的具體類。它屬於建立型模式。在抽象工廠模式中,每個具體工廠都提供了多個用於建立多種不同型別具體物件的方法,這些不同型別的物件都存在乙個共同的屬性,構成乙個族。上篇文章設計模式 八 工廠方法模式說到工廠方法模式中只考慮某一類產品的生產,例如可樂...