设计模式之工厂方法模式(C++实现)
2016-05-25 16:55
351 查看
工厂方法模式其实跟简单工厂模式比较类似,不过简单工厂违反了开放封闭原则。工厂方法模式虽然代码编写也许会比简单工厂更复杂,但是却克服了简单工厂的弊端,还是以计算器来做例子
例
/***************************************************************************main.cpp********************************************************************************/
/***************************************************************************AddFactory.h****************************************************************************/
/***************************************************************************SubFactory.h****************************************************************************/
/***************************************************************************Operator.h******************************************************************************/
/***************************************************************************Add.h***********************************************************************************/
/***************************************************************************Sub.h***********************************************************************************/
例
/***************************************************************************main.cpp********************************************************************************/
#include "Add.h" #include "Sub.h" #include "AddFactory.h" #include "SubFactory.h" int main() { Factory *myfactory = new AddFactory(); Operator *myoperator = myfactory->CreateFactory(); myoperator->Operation(); Factory *myfactory1 = new SubFactory(); Operator *myoperator1 = myfactory1->CreateFactory(); myoperator1->Operation(); getchar(); return 0; }/***************************************************************************Factory.h********************************************************************************/
#include <iostream> #include "Operator.h" #pragma once; class Factory { public: virtual Operator* CreateFactory()=0; };
/***************************************************************************AddFactory.h****************************************************************************/
#include "Factory.h" #include "Add.h" #pragma once; class AddFactory:public Factory { public: Operator* CreateFactory() { return new Add; }; };
/***************************************************************************SubFactory.h****************************************************************************/
#include "Factory.h" #include "Sub.h" #pragma once; class SubFactory :public Factory { public: Operator* CreateFactory() { return new Sub(); }; };
/***************************************************************************Operator.h******************************************************************************/
#include <iostream> using namespace std; #pragma once; class Operator { public: Operator(){}; virtual void Operation()=0; };
/***************************************************************************Add.h***********************************************************************************/
#include "Operator.h" #pragma once; class Add:public Operator { public: Add(){}; void Operation() { cout<<"a+b"<<endl; }; };
/***************************************************************************Sub.h***********************************************************************************/
#include "Operator.h" #pragma once; class Sub:public Operator { public: void Operation() { cout<<"a-b"<<endl; }; };如上面,我们定义了一个工厂方法类,然后派生了加法和减法工厂类,用于返回加法运算和减法运算类的对象。还定义了一个运算抽象基类,派生出加法和减法类,用于执行不同操作符的不同操作。这样我们要增加新的操作(比如除法),只需要派生出除法工厂类和除法类就行了,不必去修改原来的函数,实现了开放封闭原则。
相关文章推荐
- C++:数据的共享与保护
- c语言进阶之路----关于函数指针的个人心得
- 资深C++程序员学习C#要点
- 资深C++程序员学习C#要点
- 在指定文本文件中删除指定字符串C语言
- C++ 通过RegEnumKeyEx枚举的问题
- C++将类的成员函数作为回调函数
- VC++常见错误原因解析--error LNK2019: 无法解析的外部符号 "public: void __thiscall
- 打印内存的c语言实现
- LeetCode 64 Minimum Path Sum--In C++
- 注释风格转换(从C语言注释风格转换到C++注释风格)
- c++作业6
- LeetCode 345: Reverse Vowels of a String
- 杨辉三角
- C++三道笔试题
- C++面向对象实验(六)(完结)
- c语言文件读写(fread,fprintf)
- LeetCode 329: Longest Increasing Path in a Matrix
- 注释转换(C---->C++)
- C++作业-6