設計模式(五) 抽象工廠方法(多個工廠方法的組合)

2021-09-13 19:36:38 字數 3565 閱讀 7638

一、概述

抽象工廠模式提供乙個介面,用於建立相關或依賴物件的家族,而不需要明確指定具體類。可以理解成是多個工廠方法的組合。

二、解決問題

在工廠方法模式中,我們的具體建立者每次使用都只能建立乙個同型別的物件,假如我們現在需要的是多個不同型別的物件,工廠方法就滿足不了需求了。這時我們可以把多個工廠方法組合到乙個類,這就是抽象工廠模式,它就是專門用來建立多個產品,也可以說是建立產品家族的。

三、結構類圖

四、成員角色

抽象工廠(abstractfactory):客戶端直接引用,由未實現的工廠方法組成,子類必須實現其工廠方法建立產品家族。

具體工廠(concretefactory):實現抽象工廠介面,負責實現工廠方法,乙個具體工廠可以建立一組產品。

抽象產品(abstractproduct):產品家族的父類,由此可以衍生很多子產品。

具體產品(product):衍生自抽象產品,由工廠方法直接建立。

五、應用例項

首先建立抽象工廠,也就是原材料工廠

package abst***ctorymethod.pattern;

public inte***ce ingredientfactory

原材料工廠中涉及很多原材料產品,我們現在建立這些產品,先開始建立抽象產品

package abst***ctorymethod.pattern;

//麵粉

public inte***ce dough

package abst***ctorymethod.pattern;

//配料

public inte***ce sauce

package abst***ctorymethod.pattern;

//蔬菜

public inte***ce vegetable

package abst***ctorymethod.pattern;

//肉public inte***ce meat

package abst***ctorymethod.pattern;

//海鮮

public inte***ce seafood

接著建立所需的具體產品

package abst***ctorymethod.pattern;

public class dbdough implements dough

public string getname()

}

package abst***ctorymethod.pattern;

public class tomatosauce implements sauce

public string getname()

}

package abst***ctorymethod.pattern;

public class onion implements vegetable

public string getname()

}

具體原材料準備好了,我們就可以建立具體工廠了

package abst***ctorymethod.pattern;

public class shaobingingredientfactory implements ingredientfactory

public meat createmeat()

public sauce createsauce()

public seafood createseafood()

public vegetable createvegetable()

}

有了原材料工廠,可以著手做燒餅了,先建立抽象燒餅

package abst***ctorymethod.pattern;

public abstract class shaobing

//切麵糰

public void cut()

//打包

public void box()

}

建立具體燒餅

package abst***ctorymethod.pattern;

//洋蔥燒餅

public class onionshaobing extends shaobing

@override

public void prepare()

}

燒餅一切準備就緒,可以開店了

package abst***ctorymethod.pattern;

//廣州燒餅店

public class gzshaobingstore extends shaobingstore

return shaobing;

}}

測試燒餅店運**況

package abst***ctorymethod.pattern;

public class testshaobingstore

}

執行結果:

六、優點和缺點

1、優點

(1)、允許客戶使用抽象的介面建立一組相關產品,而不需要知道(或者關心)產出的具體產品是什麼,這樣客戶就可以從具體的產品中解耦出來。

(2)、乙個具體工廠可以建立多個產品,與工廠方法模式相比,可以少產生具體工廠的類數量。

(3)、易於交換產品系列,只要更換具體工廠,就可以改變這個產品系列。

2、缺點

(1)、抽象工廠是使用組合的方式把工廠方法集合到乙個類中,當新增乙個產品家族成員時就要修改抽象工廠類及其下面的具體工廠類,所以它的擴充套件性比較差。

(2)、每新增乙個產品子類都要建立乙個類,當產品子類過多時會產生很多類,導致系統複雜性加大。

七、使用場合

1、當需要建立產品家族,或者需要想讓建立的產品集合起來時使用。

2、當系列產品不固定,在以後可能會增加整個系列產品時使用。

收藏

設計模式 工廠模式(工廠方法 抽象工廠)

1 工廠方法模式 factory method 定義乙個用於建立物件的介面,讓子類決定例項化哪個類。工廠方法使乙個類的例項化延遲到其子類。正如建立交通工具,可以通過不同的工廠方法建立所需的物件。類圖 對比 1 工廠方法在產品維度,即類圖中movable方向拓展比較方便,只需增加對應的類及相應的工廠方...

設計模式 簡單工廠 工廠方法 抽象工廠方法模式

簡介 工廠方法模式分為 簡單工廠模式 工廠方法模式 抽象工廠方法模式 簡單工廠模式是屬於建立型模式,又叫做靜態工廠方法 static factory method 模式,但不屬於23種gof設計模式之一。簡單工廠模式是由乙個工廠物件決定建立出哪一種產品類的實 uml圖示例 public class ...

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

在業務邏輯中往往有需要建立物件的需求 如何將這部分邏輯封裝並且使得其能個適應於頻繁的變化呢?簡單工廠模式 將物件建立邏輯封裝隔離在簡單工廠類的方法中。簡單工廠的常見實現方式 1 簡單工廠類以及其建立物件的靜態方法 其客戶可以直接呼叫該類的靜態方法。2 簡單工廠類以及其建立物件的成員方法 其客戶 需要...