5 工廠方法模式

2021-09-05 23:35:10 字數 2980 閱讀 5275

工廠方法模式(factory method):定義了乙個用於建立物件的介面,讓子類決定例項化哪乙個類。工廠方法使乙個類的例項化延遲到其子類。

結構圖:

**:乙個具體的產品,對應乙個工廠子類。同時,解決了工廠類與分支的耦合。

簡單工廠模式最大的優點在於工廠類中包含了必要的邏輯判斷(也是工廠類中的耦合),根據客戶端的選擇條件例項化相關的類,對於客戶端來說,去除了與具體產品的以來。

例子:計算器的簡單工廠模式結構圖:

計算器的工廠方法模式結構圖:

增加方法時,只需擴充套件,不需修改(開-閉模式)

優點:「工廠方法克服了簡單工廠違背開放-封閉原則的缺點,又保持了封裝物件建立原則的優點。」

缺點:「工廠模式實現時,客戶端需要決定哪乙個工廠來例項化運算類,選擇判斷問題還是存在的,也就是說,工廠方法把簡單工廠的內部邏輯判斷移到了客戶端**來進行。你想要加功能,本來是改工廠類的,而現在是修改客戶端。」

1

#include

<

iostream

>

2#include

<

string

>34

using

std::

string;5

using

std::cout;

6using

std::endl;78

template

<

class

t>

9class

operation

1017

virtual

t getresult()

1822

public:23

t numbera;

24t numberb;

25};

2627

template

<

class

t>

28class

operationadd :

public

operation

<

t>

2935

};36

37template

<

class

t>

38class

operationminus :

public

operation

<

t>

3945

};46

47template

<

class

t>

48class

operationmultiply :

public

operation

<

t>

4955

};56

57template

<

class

t>

58class

operationdivide :

public

operation

<

t>

5965

};66

6768

/*//簡單工廠模式的工廠類

69template

70class operationfactory

7180

else if(operate == "-")

8184

else if(operate == "*")

8588

else if(operate == "/")

8992

else //預設產生的是加法運算

9396

97return oper;

9899

}100

};101

*/102

//抽象工廠介面類

103template

<

class

t>

104class

ifactory

105;

109110

//加減乘除各建乙個具體工廠去實現這個介面

111template

<

class

t>

112class

addfactory :

public

ifactory

<

t>

113119

};120

121template

<

class

t>

122class

minusfactory :

public

ifactory

<

t>

123129

};130

131template

<

class

t>

132class

multiplyfactory :

public

ifactory

<

t>

133139

};140

141template

<

class

t>

142class

devidefactory :

public

ifactory

<

t>

143149

};150

151int

main()

152

工廠方法模式 工廠方法模式

工廠方法模式是簡單工廠模式的公升級版,簡單工廠模式不符合設計模式的原則 即 單一職責,開閉原則 優點 職責明確,擴充套件方便 缺點 需要建立多個工廠 實現步驟 1.將工廠通用方法抽取介面 例如 ifactory 2.將產品抽取介面 例如 icar 3.實現各種產品 例如 baomacar,benti...

工廠方法模式 工廠方法模式 二

工廠方法模式是對簡單工廠的進一步抽象和封裝,需要新的類物件時不需要對既有工廠類進行修改,而是增加新的工廠類。工程類可以使用模版進一步封裝,由編譯器來生成 從而減少 編寫工作量。工廠方法的 c 實現01part產品抽象基類class animal virtual void show 0 02part產...

大戰設計模式 5 工廠方法模式

設計模式使用的例子 定義乙個用於建立物件的介面,讓子類決定將哪乙個類例項化。工廠方法模式讓乙個類的例項化延遲到其子類。工廠方法模式又簡稱為工廠模式,也可稱為多型工廠模式,它是一種建立型模式。product 抽象產品 定義產品的介面,是工廠方法模式所建立的物件的超類,也就是產品物件的公共父類。conc...