您的位置:首页 > 其它

(四)工厂方法模式

2015-09-17 09:25 288 查看
见源码和注释:

//工厂方法模式
/*
工厂方法模式之精髓:
	定义一个用于创建对象的接口,让子类决定实例化哪一个类,使一个类的实例化延迟到子类。
什么情况下用呢:
	能用到简单工厂的地方都能用到。
优点:
	相比较简单工厂而言:
	简单工厂模式其特点是在工厂类中包含了必要的逻辑判断,根据客户端动态选择
	实例化相关的类,出去了客户端与其功能的依赖;
	但如果要增加一个新的功能,则必须要增加工厂类的逻辑判断,这就违背了
	开放-封闭原则中的封闭原则(对类进行修改),所以工厂方法应运而生。
*/

#include <iostream>
#include <string>

using namespace std;

//运算抽象类
class COperation
{
public:
	virtual ~COperation() {}

	int m_iNumA;
	int m_iNumB;

	virtual int GetResultNow() 
	{
		return 0;
	}
};

//加法类
class COperationAdd : public COperation
{
public:
	int GetResultNow()
	{
		return m_iNumA + m_iNumB;
	}
};

//减法类
class COperationSub : public COperation
{
public:
	int GetResultNow()
	{
		return m_iNumA - m_iNumB;
	}
};

//抽象工厂
class CFactory
{
public:
	virtual ~CFactory() {}

	virtual COperation *CreateOperation()
	{
		return NULL;
	}
};

//加法工厂
class CAddFactory : public CFactory
{
public:
	COperation *CreateOperation()
	{
		COperationAdd *pOperationAdd = new COperationAdd;
		return pOperationAdd;
	}
};

//减法工厂
class CSubFactory : public CFactory
{
public:
	COperation *CreateOperation()
	{
		COperationSub *pOperationSub = new COperationSub;
		return pOperationSub;
	}
};

int main()
{
	//实例化工厂
	CFactory *pFactory = new CSubFactory;
	if (NULL == pFactory)
	{
		return -1;
	}

	//实例化操作
	COperation *pOperation = pFactory->CreateOperation();
	if (NULL == pOperation)
	{
		return -1;
	}

	pOperation->m_iNumA = 2;
	pOperation->m_iNumB = 4;

	cout << pOperation->GetResultNow() << endl;

	delete pFactory;
	delete pOperation;

	return 0;
}


输出:

-2

请按任意键继续. . .
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: