您的位置:首页 > 编程语言 > C语言/C++

设计模式之工厂方法模式(C++实现)

2016-05-25 16:55 351 查看
工厂方法模式其实跟简单工厂模式比较类似,不过简单工厂违反了开放封闭原则。工厂方法模式虽然代码编写也许会比简单工厂更复杂,但是却克服了简单工厂的弊端,还是以计算器来做例子



/***************************************************************************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;
};
};
如上面,我们定义了一个工厂方法类,然后派生了加法和减法工厂类,用于返回加法运算和减法运算类的对象。还定义了一个运算抽象基类,派生出加法和减法类,用于执行不同操作符的不同操作。这样我们要增加新的操作(比如除法),只需要派生出除法工厂类和除法类就行了,不必去修改原来的函数,实现了开放封闭原则。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: