工廠方法模式(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...