一 簡單工廠模式

2021-08-27 05:57:55 字數 1791 閱讀 5622

(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如...