設計模式-簡單工廠模式
阿新 • • 發佈:2017-07-10
sha include highlight namespace 簡單工廠模式 case int 工廠模式 argv
簡單工廠模式:是一種實例化對象的方式,只要輸入實例化對象的名字,就可以通過工廠對象的相應工廠函數來制造你需要的對象
核心是,對於一個父類的多個繼承子類,工廠對象的工廠函數根據用戶輸入,自動new 出一個子類對象 並返回其父類的指針,這樣利用父類的指針執行父類的虛函數,就可以動態綁定子類的重寫函數,從而實現多態.
#include <stdlib.h> #include <stdio.h> #include <string.h> #include <iostream> #include <memory> using namespace std; class Operation { private: double A, B; public: double GetA() const {return A;} double GetB() const {return B;} void SetA(double x) {A=x;} void SetB(double y) {B=y;} double virtual GetResult(){return 0;} Operation():A(0), B(0){} }; class Add : public Operation { public: double GetResult() { return GetA()+GetB(); } }; class Sub : public Operation { public: double GetResult() { return GetA()-GetB(); } }; class Mul : public Operation { public: double GetResult() { return GetA()*GetB(); } }; class Div : public Operation { public: double GetResult() { return GetA()/GetB(); } }; 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; } return p; } }; int main(int argc, char *argv[]) { double A = 0; double B = 0; char ch = ‘\0‘; cin>>A>>ch>>B; tr1::shared_ptr<Operation> op(SimpleFactory::CreateOpeartor(ch)); op->SetA(A); op->SetB(B); cout<<op->GetResult()<<endl; system("pause"); return 0; }
設計模式-簡單工廠模式