Simple Factory Pattern--簡單工廠模式
阿新 • • 發佈:2018-12-30
介紹:簡單工廠模式不能說是一個設計模式,說它是一種程式設計習慣可能更恰當些。因為它至少不是Gof23種設計模式之一。但它在實際的程式設計中經常被用到,而且思想也非常簡單,可以說是工廠方法模式的一個引導。
動機:當你需要什麼,只需要傳入一個正確的引數,就可以獲取你所需要的物件,而無須知道其建立細節。
定義:簡單工廠模式(Simple Factory Pattern):又稱為靜態工廠方法(Static Factory Method)模式,它屬於類建立型模式。在簡單工廠模式中,可以根據引數的不同返回不同類的例項。簡單工廠模式專門定義一個類來負責建立其他類的例項,被建立的例項通常都具有共同的父類。
優缺點
優點:實現物件的建立和物件的使用分離,將物件的建立交給專門的工廠類負責。
缺點:工廠類不夠靈活,增加新的具體產品需要修改工廠類的判斷邏輯程式碼,而且產品較多時,工廠方法程式碼將會非常複雜。
使用場合:工廠類負責建立的物件比較少:由於建立的物件較少,不會造成工廠方法中的業務邏輯太過複雜。
舉例如下:
對於一個只擁有加減乘除運算的簡單計算器,我們設計一個Operation的父類,並構造加減乘除四個類繼承父類重寫運算函式
GetResult。然後定義工廠類中的工廠函式,其根據使用者的輸入new出相應的物件例項並返回其父類的指標。
UML圖如下所示:
注意智慧指標的使用,可以防止資源洩露
#include<iostream> #include<memory> using namespace std; class Operation { private: double n1, n2; public: double GetN1() const { return n1; } double GetN2() const { return n2; } void SetN1(double x) { n1 = x; } void SetN2(double y) { n2 = y; } virtual double GetResult() = 0; }; class Add : public Operation { public: double GetResult() override { return GetN1() + GetN2(); } }; class Sub : public Operation { public: double GetResult() override { return GetN1() - GetN2(); } }; class Mul : public Operation { public: double GetResult() override { return GetN1()*GetN2(); } }; class Div : public Operation { public: double GetResult() override { return GetN1() / GetN2(); } }; class SimpleFactory { public: static Operation* CreateOpeartor(char ch) { Operation * p; switch (ch) { case '+': p = new Add(); break; case '-': p = new Sub(); break; case '*': p = new Mul(); break; case '/': p = new Div(); break; default: p = nullptr; } return p; } }; int main() { double a = 0; double b = 0; char ch = '\0'; cin >> a >> ch >> b; //使用智慧指標,防止資源洩露 shared_ptr<Operation> op(SimpleFactory::CreateOpeartor(ch)); op->SetN1(a); op->SetN2(b); cout << op->GetResult() << endl; }
參考:
1.https://www.cnblogs.com/jostree/p/4251756.html
2.https://www.cnblogs.com/Bobby0322/p/4178412.html