设计模式C++版:第零式简单工厂
来源:互联网 发布:海通交易软件 编辑:程序博客网 时间:2024/05/01 08:51
在前面介绍C++基础的时候,我们写了一个简单地计算类 http://blog.csdn.net/thedarkfairytale/article/details/51750971 。考虑到易扩展和复用的特性,下面使用设计模式的简单工厂类实现一下(自己对着代码动手敲一下,感觉绝对不同):
class Operation{public:virtual double getresult(){ return 0; }public:double m_firstnum;double m_secondnum;};class OperationAdd :public Operation{public:double getresult(){ return m_firstnum + m_secondnum; }};class OperationSub :public Operation{public:double getresult(){ return m_firstnum - m_secondnum; }};class OperationMul :public Operation{public:double getresult(){ return m_firstnum * m_secondnum; }};class OperationDiv :public Operation{public:double getresult(){if (0 != m_secondnum){return m_firstnum / m_secondnum;}else{printf("the second number can't be zero!");return 0;}}};enum ENUMOPERATION{ADD = 1,SUB = 2,MUL = 3,DIV = 4};class SimpleFactory{public:SimpleFactory():m_oper(nullptr){}Operation &createoperaton(ENUMOPERATION oper);private:Operation * m_oper;};Operation& SimpleFactory::createoperaton(ENUMOPERATION oper){if (m_oper!=nullptr){delete m_oper;m_oper = nullptr;}switch (oper){case ADD:m_oper = new OperationAdd;break;case SUB:m_oper = new OperationSub;break;case MUL:m_oper = new OperationMul;break;case DIV:m_oper = new OperationDiv;break;default:m_oper = new OperationAdd;break;}return *m_oper;}int main(){Operation *oper; SimpleFactory factory;oper = &factory.createoperaton(ADD);oper->m_firstnum = 12;oper->m_secondnum = 21;cout << oper->getresult() <<endl;return 0;}
使用简单工厂模式后的代码,和之前简单的封装以后对比发现,之前的单一接口,都变成了一个运算类,这样的好处是,我们隔离了各种运算,想要复用其中的一个算法不用把其他的也都牵连进来。
如果我们修改加法,则不必和减法产生任何关联,同理修改乘法也不必和除法有什么关联,另外我们添加其他运算方式也方便同时不至于一个类变得太大。如果我们只想使用复用加法和减法,那么我们只需把加减法的运算类拿过来使用即可,不必和乘除法有什么联系。但简单工厂也是很多不足,比如每次添加或减少运算类,都要修改工厂类,在一定程度上降低了工厂类的封装性。
0 0
- C#--简单工厂设计模式
- 设计模式 - 简单工厂模式(C++)
- C#--设计模式之简单工厂模式
- 设计模式C++版:第零式简单工厂
- 设计模式之简单工厂,工厂方法模式(c++)
- 简单工厂设计模式
- 设计模式-----简单工厂
- 简单工厂设计模式
- 设计模式:简单工厂
- 设计模式 - 简单工厂
- 设计模式 简单工厂
- 【设计模式】【简单工厂】
- 简单工厂设计模式
- 简单工厂设计模式
- 设计模式--简单工厂
- 简单工厂设计模式
- 简单工厂设计模式
- 设计模式------------简单工厂
- C语言中的流程控制深入理解
- (扩展)欧几里得算法、素性测试、埃式筛法、区间筛法、快速幂运算
- 个体软件过程中代码的估算、度量和错误的记录
- 一起写RPC框架(三)RPC网络模块的搭建一 网络传输模型
- HDU5834解题报告
- 设计模式C++版:第零式简单工厂
- C++实现的双向循环链表类
- 关于Docker Registry v2的搭建
- iOS开发 - KVO
- [暑假集训] jzoj 2016.8.15 noip模拟赛B 总结
- HDU 1862 EXCEL排序
- TabLayout添加图片
- 8-15ASR
- 2016.08.15【初中部 NOIP提高组 】模拟赛C