當邏輯較為簡單時,可以直接建立對應的類。**如下:
#include
using
namespace std;
class};
class
banana};
class
pear};
intmain()
通過此**可以發現,使用者直接與客戶接觸,違背了dip(依賴倒轉)原則,過於麻煩,所以引出簡單工廠模式。
#include
using
namespace std;
#include
class
fruit
;class
:public fruit};
class
banana
:public fruit};
class
pear
:public fruit};
class
factory
if(name==
"香蕉")if
(name==
"梨")
return fruit;
}private
: fruit *fruit;};
intmain()
在簡單工廠模式中,使用者直接與factory(工廠)互動,而不與產品(水果)互動,體現了dip原則,但是當需要新增新的產品時,需要在factory中修改**,這不符合ocp(開閉原則),因此引入工廠模式
#include
using
namespace std;
#include
class
fruit
;class
:public fruit};
class
banana
:public fruit};
class
pear
:public fruit};
class
factory
;class
:public factory};
class
bananafactory
:public factory};
class
pea***ctory
:public factory};
intmain()
在工廠模式中,每個工廠都對應乙個特定的產品,當需要新增新的產品時,只需要繼承產品類和繼承工廠類即可,這體現可ocp原則,解決了簡單工廠的問題。但是當產品族和產品等級結構較複雜時,這時需要使用抽象工廠模式。下面介紹產品族和產品等級結構。
紅色框為乙個產品族,代表中國的蘋果、中國的香蕉和中國的梨。
藍色框為乙個產品等級結構,代表中國的蘋果、美國的蘋果和英國的蘋果
如果使用工廠模式實現上圖,需要對每個國家的每種水果都需要建立乙個工廠,總共需要9個工廠。但是在抽象工廠模式中,僅需使用三個抽象工廠即可完成任務,**如下:
#include
using
namespace std;
#include
//抽象層
class
;class
banana
;class
pear
;class
factory
;//架構層
class
eatvoid
show()
private
: banana *m_banana;
pear *m_pear;};
//實現層
//中國的水果
class:}
;class
chinabanana
:public banana};
class
chinapear
:public pear};
class
chinafactory
:public factory
banana *
eatbanana()
pear *
eatpear()
};//美國的水果
class:}
;class
usabanana
:public banana};
class
usapear
:public pear};
class
usafactory
:public factory
banana *
eatbanana()
pear *
eatpear()
};//英國的水果
class:}
;class
ukbanana
:public banana};
class
ukpear
:public pear};
class
ukfactory
:public factory
banana *
eatbanana()
pear *
eatpear()
};intmain()
當需要新增產品族時,只需要在原有factory(工廠)基礎上繼承新的factory,符合ocp原則。
但是當需要新增新的產品等級結構時,需要修改抽象類中的**,不符合ocp原則,所有抽象工廠模式適用於產品等級結構確定的情況使用。
簡單工廠模式不是gof中的,但是由於其使用方便,所以目前也被作為一種設計模式。
1.當邏輯簡單時,使用簡單工廠
2.當邏輯複雜,使用工廠模式
3.在2的前提下,產品等級結構確定時,使用抽象工廠模式。
設計模式 工廠模式(簡單工廠)
一 簡單工廠 定義 簡單工廠模式 factory pattern 屬於類的創新型模式,又叫靜態工廠方法模式 static factorymethod pattern 是通過專門定義乙個類來負責建立其他類的例項,被建立的例項通常都具有共同的父類。特點 工廠類直接實現,乙個產品介面,乙個工廠類可以產生多...
設計模式 工廠模式之簡單工廠模式
定義 由乙個工廠物件 工廠類 來指定建立某乙個產品類的例項。使用場景 客戶端只需傳入指定的引數即可,工廠類負責建立的物件較少 因為指定了傳入的引數 介面類 本想用iphone命名的,見諒 public inte ce phone實現介面類 public class huaweiphone imple...
工廠設計模式一 簡單工廠模式
工廠設計模式實現了建立者和呼叫者的分離。類別 1.簡單工廠模式 2.工廠方法模式 3.抽象工廠模式 遵循的設計原則 1.ocp 開閉原則,open closed principle 乙個軟體的實體應當那個對擴充套件開放,對修改關閉 2.dip 依賴倒置原則,dependence inversion ...