大話設計模式第1章——簡單工廠模式
阿新 • • 發佈:2018-12-15
簡單工廠模式是屬於建立型模式,又叫做靜態工廠方法(Static Factory Method)模式,實質是由一個工廠類根據傳入的引數,動態決定應該建立哪一個產品類(這些產品類繼承自一個父類或介面)的例項。
該模式中包含三個角色:
工廠(Factory)角色
簡單工廠模式的核心,它負責實現建立所有例項的內部邏輯。工廠類的建立產品類的方法可以被外界直接呼叫,建立所需的產品物件。
抽象產品(Product)角色
簡單工廠模式所建立的所有物件的父類,它負責描述所有例項所共有的公共介面。
具體產品(Concrete Product)角色
是簡單工廠模式的建立目標,所有建立的物件都是充當這個角色的某個具體類的例項。
優點:外界不需要知道具體物件如何建立和組織,明確了各自的職責;
缺點:違反了高內聚的原則,將全部建立邏輯集中到了一個工廠類中;它所能建立的類只能是事先考慮到的,如果需要新增新的類,則就需要改變工廠類了。
UML類圖:
C++實現:
#include <iostream> using namespace std; //演算法抽象類 class OPeration { public: double GetA() { return m_dA; } double GetB() { return m_dB; } virtual double GetResult() { double dResult = 0; return dResult; } void SetA(double dA) { m_dA = dA; } void SetB(double dB) { m_dB = dB; } protected: double m_dA; double m_dB; }; class OperationAdd:public OPeration { public: double GetResult() { double dResult = m_dA + m_dB; return dResult; } }; class OperationSub:public OPeration { public: double GetResult() { double dResult = m_dA - m_dB; return dResult; } }; class OperationMult:public OPeration { public: double GetResult() { double dResult = m_dA * m_dB; return dResult; } }; class OperationDivi:public OPeration { public: double GetResult() { if(0 == m_dA) { return 0; } double dResult = m_dA / m_dB; return dResult; } }; //工廠類 class OPerationFactory { public: OPeration *CreateOperation(char type) { OPeration *oper = NULL; switch(type) { case '+': oper = new OperationAdd; break; case '-': oper = new OperationSub; break; case '*': oper = new OperationMult; break; case '/': oper = new OperationDivi; break; } return oper; } }; int main() { OPerationFactory factory; OPeration *oper = factory.CreateOperation('*'); oper->SetA(123); oper->SetB(321); cout << oper->GetResult() << endl; if(oper != NULL) { delete oper; oper = NULL; } return 0; }