大话设计模式——工厂方法模式(C++计算器修改)
2014-05-31 19:09
239 查看
工厂方法(Factory Method)模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的产品。
工厂方法模式是简单工厂模式的衍生,解决了许多简单工厂模式的问题。首先完全实现‘开-闭 原则’,实现了可扩展。其次更复杂的层次结构,可以应用于产品结果复杂的场合。
下面的代码是在前面简单工厂模式上修改的,可以参考一下区别,代码里面有注释。
工厂方法模式是简单工厂模式的衍生,解决了许多简单工厂模式的问题。首先完全实现‘开-闭 原则’,实现了可扩展。其次更复杂的层次结构,可以应用于产品结果复杂的场合。
下面的代码是在前面简单工厂模式上修改的,可以参考一下区别,代码里面有注释。
// // main.cpp // Factory // // Created by Ben_22 on 14-5-28. // Copyright (c) 2014年 Ben_22. All rights reserved. // #include <iostream> #include "string" using namespace::std; class Operation{ public: double _numberA = 0; double _numberB = 0; public: virtual double getResult()=0; }; class OperationAdd : public Operation{ public: double getResult() override{ return _numberA+_numberB; } }; class OperationSub : public Operation{ public: double getResult() override{ return _numberA-_numberB; } }; class OperationMul : public Operation{ public: double getResult() override{ return _numberA*_numberB; } }; class OperationDiv : public Operation{ public: double getResult() override{ if (_numberB==0) { printf("异常\n"); return 0; } return _numberA/_numberB; } }; /*下面为简单工厂模式*/ /*违背了开闭原则 *每次新加运算都要在OperationFactory类添加case修改类。 */ class OperationFactory{ public: static Operation* createOpr(char operate){ Operation *oper = nullptr; switch (operate) { case '+': oper = new OperationAdd; break; case '-': oper = new OperationSub; break; case '*': oper = new OperationMul; break; case '\\': oper = new OperationDiv; break; default: break; } return oper; }; }; /*下面为工厂方法模式*/ /*工厂方法对简单工厂做了进一步抽象, 多了一个Factory类,这个类将不再负责具体的产品生产,而是只制定一些规范,具体的生产工作由其子类去完成。 */ class Factory{ public : Operation createOpr(); }; class FactoryAdd : public Factory{ public: Operation *createOpr(){ return new OperationAdd(); } }; class FactorySub : public Factory{ public: Operation *createOpr(){ return new OperationSub(); } }; class FactoryMul : public Factory{ public: Operation *createOpr(){ return new OperationMul(); } }; class FactoryDiv : public Factory{ public: Operation *createOpr(){ return new OperationDiv(); } }; int main(int argc, const char * argv[]) { int num1 = 5, num2 = 9; //简单工厂模式 Operation *temp1 = OperationFactory::createOpr('+'); temp1->_numberA = num1; temp1->_numberB = num2; cout<<"和"<<temp1->getResult()<<endl; //工厂方法模式 Operation *tempA = (new FactoryAdd())->createOpr(); tempA->_numberA = num1; tempA->_numberB = num2; cout<<"和"<<tempA->getResult()<<endl; return 0; }
相关文章推荐
- 大话设计模式--工厂方法模式 Factory Method -- C++实现
- 大话设计模式C++实现-第8章-工厂方法模式
- 大话设计模式中简单工厂模式的计算器实例的C++代码
- 大话设计模式C++版——工厂方法模式
- 大话设计模式C++实现-第8章-工厂方法模式
- 工厂方法模式---重写计算器(C++)
- 大话设计模式 工厂模式 C++计算器
- 大话设计模式8 c++实现——工厂方法模式
- 大话设计模式--工厂方法模式 Factory Method -- C++实现
- 大话设计模式C++版——工厂方法模式
- C++如何修改SDI程序的默认背景颜色
- C++如何修改SDI程序的默认背景颜色
- awt,swing做的计算器小代码(效果图和源码)对前面版本作了些小修改
- 计算器c++实现
- 读书 大话设计模式 第一章 简单工厂模式 C++实现 已完
- c/c++语言实现堆栈修改,通过ret跳转到自定义函数
- C++修改注册表信息
- [c/c++] "? :" 在何种状况下不能修改为"if (..) {..} else {..}"?
- C++(STL)实现的修改游戏存档文件的2个相关类
- 用C++修改本地安全策略