代碼實現?
//simpleFactory.h
#ifndef _SimpleFactory_H_
#define _SimpleFactory_H_#include <iostream>
#include <exception>
#include <string>using namespace std;class Operation {
protected:double _numberA = 0;double _numberB = 0;
public:Operation() {}Operation(double a, double b) {_numberA = a;_numberB = b;}Operation& operator=(Operation& p) {_numberA = p.getNumberA();_numberB = p.getNumberB();}double getNumberA() {return _numberA;}void setNumberA(double value) {_numberA = value;}double getNumberB() {return _numberB;}void setNumberB(double value) {_numberB = value;}virtual double GetResult() {return 0;}
};
class OperationAdd :public Operation {double GetResult() {double result = 0;result = _numberA + _numberB;return result;}
};
class OperationSub :public Operation {double GetResult() {double result = 0;result = _numberA - _numberB;return result;}
};
class OperationMul :public Operation {double GetResult() {double result = 0;result = _numberA * _numberB;return result;}
};
class OperationDiv :public Operation {double GetResult() {double result = 0;try {result = _numberA / _numberB;}catch (exception&) {cout << "發生除0異常" << endl;}return result;}
};
class OperationFactory {
public:static Operation* createOperation(char operate) {Operation* oper;switch (operate) {case '+':oper = new OperationAdd();break;case '-':oper = new OperationSub();break;case '*':oper = new OperationMul();break;case '/':oper = new OperationDiv();break;}return oper;}
};
#endif //_SimpleFactory_H_
UML圖
總結
可以發現,簡單工廠類是制造運算類的對象的,并且只需要傳遞關鍵參數給簡單工廠類的方法(通常為靜態方法),就可以創造出相應的對象出來。
故簡單工廠適用于工廠類負責創建的對象較少的場景,且客戶端只需要傳入工廠類的參數,對于如何創建對象不需要關心。
收獲
1.可以通過封裝、繼承、多態把程序的耦合度降低。
2.可以通過設計模式使程序變得更加靈活,易于修改,并且易于復用。
3.簡單工廠模式適用創建對象少的情況,需要傳參來指定需要的對象(產品)。