(1)主要用於建立物件。新新增類時,不會影響以前的的系統**。
核心思想是用乙個工廠來根據輸入的條件產生不同的類,然後根據不同類的virtual函式得到不同的結果。
簡單工廠模式的實質是由乙個工廠類根據傳入的引數,動態決定應該建立哪乙個產品類的例項。
(2)模式結構
工廠(factory):整個模式的核心,負責實現建立所有例項的內部邏輯。
抽象產品(product):所有具體產品的父類,負責描述所有例項所共有的公共介面。
具體產品(concreateproduct):最終建立的具體產品。
(3)優缺點
優點:工廠類包含了必要的邏輯判斷,根據指定的資訊來建立對應的產品。客戶端僅負責「消費」產品即可,實現了物件建立和使用的分離。
客戶端無需關心具體產品如何建立與組織,僅需知道具體產品所對應的引數即可,可以在一定程度減少使用者的記憶量。
缺點:由於工廠類集中了所有產品的建立邏輯(違反了高內聚責任分配原則),職責過重,一旦無法正常工作,整個系統都將受到影響。
一旦新增新產品就不得不修改工廠邏輯,在產品型別較多時,有可能造成工廠邏輯過於複雜,不利於系統的擴充套件和維護。
(4)適用場景
工廠類負責建立的物件比較少。
客戶端僅需知道傳入工廠類的引數,對於如何建立物件不關心。
(5)例子:
//基類
class coperation
public:
int m_nfirst;
int m_nsecond;
virtual double getresult()
double dresult = 0;
return dresult;
//加法
class addoperation : public coperation
public:
virtual double getresult()
return m_nfirst + m_nsecond;
//減法
class suboperation : public coperation
public:
virtual double getresult()
return m_nfirst - m_nsecond;
//工廠類
class ccalculato***ctory
public:
static coperation* create(char coperator);
coperation* ccalculato***ctory::create(char coperator)
coperation *oper;
switch(coperator)
case '+':
oper = new addoperation();
break;
case '-':
oper = new suboperation();
break;
default:
oper = new addoperation();
break;
return oper;
//客戶端
int main()
int a, b;
cin >> a >> b;
coperation* op = ccalculato***ctory::create('-');
op->m_nfirst = a;
op->m_nsecond = b;
cout << op->getresult() << endl;
return 0;
工廠設計模式一 簡單工廠模式
工廠設計模式實現了建立者和呼叫者的分離。類別 1.簡單工廠模式 2.工廠方法模式 3.抽象工廠模式 遵循的設計原則 1.ocp 開閉原則,open closed principle 乙個軟體的實體應當那個對擴充套件開放,對修改關閉 2.dip 依賴倒置原則,dependence inversion ...
工廠設計模式(一) 簡單工廠模式
工廠設計模式可分為 簡單工廠模式 工廠方法模式 抽象工廠模式 第一篇我們來聊聊 理解 假設某些例項具有相同的方法,可以根據引數的不同返回不同的例項,被建立的例項通常都具有共同的父類,那麼可以考慮使用簡單設計模式來實現。例如可以實用簡單工廠模式設計乙個可以建立不同幾何形狀 如圓形 方形和三角形等 的繪...
設計模式 一 工廠模式 簡單工廠
以前總覺得設計模式純屬扯淡,浪費精力,10 能搞定的事情非要寫那麼多的介面或者實現類.為什麼要用設計模式,開發有乙個重要的原則 對修改關閉,對擴充套件開放.因為如果把 全部都雜糅到乙個類中,第一 復用性太差,擴充套件性不強.第二,修改起來一改巨改,改動即意味著要增加測試人員工作量,且引入修改bug如...