C++ 01简单工厂模式

来源:互联网 发布:系统功能开发 java 编辑:程序博客网 时间:2024/06/08 12:49

下文是关于设计一个计算器的思路,本文采用了简单工厂模式设计计算器,定义一个工厂类,通过工厂类中的createOperate函数做逻辑判断,来调用具体的计算器类。直接看结构图,简单明了。

简单工厂模式结构图如下:


代码实现如下:

#include<iostream>#include<string>using namespace std;//抽象运算类class Operation{private:double numberA = 0;double numberB = 0;public:double getNumberA(){return numberA;}void setNumberA(double _numberA){numberA = _numberA;}double getNumberB(){return numberB;}void setNumberB(double _numberB){numberB = _numberB;}    virtual double getResult() =0{double result = 0;return result;}};//加法类class OperationAdd :public Operation{public:double getResult(){double result = 0;result = getNumberA() + getNumberB();return result;}};//减法类class OperationSub :public Operation{public:double getResult(){double result = 0;result = getNumberA()-getNumberB();return result;}};//乘法类class OperationMul :public Operation{public:double getResult(){double result = 0;result = getNumberA() * getNumberB();return result;}};//除法类class OperationDiv :public Operation{public:double getResult(){double result = 0;if (this->getNumberB() == 0){cout << "除数不能为0" << endl;return 0;}result = getNumberA() / getNumberB();return result;}};//运算工厂类class OperationFactory{public:static Operation* createOperate(const char operate){Operation * oper = 0;switch (operate){case '+':oper = new OperationAdd();break;case '-':oper = new OperationSub();break;case '*':oper = new OperationMul();break;case '/':oper = new OperationDiv();break;}return oper;}};//客户端代码int main(){Operation *oper = 0;oper = OperationFactory::createOperate('+');oper->setNumberA(1);oper->setNumberB(2);double result = oper->getResult();cout << result << endl;return 0;}
简单工厂模式的最大优点在于工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了与具体产品的依赖。

如果再扩展其他功能,需要添加具体类来继承抽象操作类,且要修改工厂类,这就违背了开放-封闭原则(修改了原有的类)。

0 0
原创粉丝点击