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

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

/***************************************************************************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;
	};
};
如上面,我们定义了一个工厂方法类,然后派生了加法和减法工厂类,用于返回加法运算和减法运算类的对象。还定义了一个运算抽象基类,派生出加法和减法类,用于执行不同操作符的不同操作。这样我们要增加新的操作(比如除法),只需要派生出除法工厂类和除法类就行了,不必去修改原来的函数,实现了开放封闭原则。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值