简单工厂模式
来源:互联网 发布:淮南安广网络营业厅 编辑:程序博客网 时间:2024/06/11 06:04
问题:现在实现一个计算器功能,输入两个数和操作符,求两个数操作之后的结果。
于是可以有这样一份代码:
switch (ch){case '+':...}
改进:使用面向对象的思想,让操作和实现分离,从而使得程序更加灵活,容易修改,并且易于复用。
设计出这样的一个类:
class operation{public:int getresult(int a, int b, char ch){int c = 0;switch (ch){case '+':c = a + b;break;....}return c;}};
优点:实现了操作和实现的分离。缺点:仅仅用到了面对对象三大特征中的封装这一个特性,没有用到多态和继承;如果要增加新功能就得大改代码,重新编译,这是很不划算的。改进方法:无论是加减乘除还是其他新的操作,归结起来都是对两个数进行操作,得到一个结果,因此可以定义一个操作,加减乘除操作都是继承该操作。
#include <iostream>#include <string>using namespace std;class Operation{public:double A, B;virtual double getResult()//{return 0;}virtual ~Operation(){}};class AddOperation :public Operation{public:double getResult(){return A + B;}};class SubOperation :public Operation{public:double getResult(){return A - B;}};class MulOperation :public Operation{public:double getResult(){return A * B;}};class DivOperation :public Operation{public:double getResult(){if (abs(B) < 1.0e-8){cout << "error" << endl;return 0;}else{return A / B;}}};class OperationFactory{public: static Operation* createoperator(char ch){switch (ch){case '+':return new AddOperation();break;case '-':return new SubOperation();break;case '*':return new MulOperation();break;case '/':return new DivOperation();break;default:break;}return nullptr;}};int main(){Operation* op = OperationFactory::createoperator('+');op->A = 10;op->B = 20;cout << op->getResult() << endl;delete op;}
阅读全文
0 0
- 工厂模式-简单工厂
- 工厂模式-简单工厂
- 工厂模式-简单工厂模式
- 工厂模式-简单工厂模式
- 简单工厂模式,工厂模式
- 工厂模式-简单工厂模式
- 简单工厂模式,工厂模式
- 简单工厂、工厂模式、抽象工厂模式
- 简单工厂、工厂模式、抽象工厂模式
- 简单工厂&工厂模式&抽象工厂模式
- 简单工厂和工厂模式
- 简单工厂和工厂模式
- 1,工厂模式--简单工厂
- 简单工厂和工厂模式
- 简单工厂,工厂模式,抽象工厂
- 简单工厂,工厂模式,抽象工厂
- 简单工厂、工厂方法、抽象工厂模式
- 简单工厂、工厂模式和抽象工厂
- MDVR大揭秘--------------启动信息分析
- 数据库(第一范式,第二范式,第三范式)
- Golang学习之常见错误
- 控制WinForm中右键菜单
- spring 中如果bean没有id或name标志 获取bean的方法
- 简单工厂模式
- leetcode
- Python pass 语句
- 第十一篇: JAVA加密解密之Base64
- 判断浏览器是pc端还是手机端
- 一只青蛙一次可以跳上1级台阶,也可以跳上2级,也可以跳3级。求该青蛙跳上一个n级的台阶总共有多少种跳法,并且打印所有跳跃路径。
- jquery动态添加元素无法触发绑定的事件的解决方案
- [转]17个新手常见的Python运行时错误
- 数字图像处理基础:教你如何区分单色图像、灰度图像、伪彩色图像、真彩色图像