码迷,mamicode.com
首页 > 编程语言 > 详细

大话设计模式C++版——简单工厂模式

时间:2015-05-23 11:34:34      阅读:154      评论:0      收藏:0      [点我收藏+]

标签:设计模式   工厂模式   简单工厂模式   c++   

简单工厂模式应该是所有设计模式中最简单,也最基础的一种模式,以下是一个简单的采用工厂模式写一个加减法的计算器。


1、抽象接口类——依赖倒转原则(高层和底层都要依赖于抽象,针对接口编程)

class IOperation
{
public:
	IOperation() : m_nNuml(0), m_nNumr(0) {}
	virtual	~IOperation() {}
	
	virtual	void	SetNum(int nNuml = 0, int nNumr = 0)
	{
		m_nNuml = nNuml;
		m_nNumr = nNumr;
	}
	virtual	int		CalculateResult() = 0;
	
protected:
	int	m_nNuml, m_nNumr;
};

注:m_nNuml, m_nNumr申明为protected,是为了让继承类中能够使用,同时又保持其访问的私有性,这和C#是不一样的地方


2、接口实现对象类——加法、减法类(乘除法就省略了,类似)

class COperation_Add : public IOperation
{
public:
	int		CalculateResult()
	{
		return	m_nNuml + m_nNumr;
	}
};


class COperation_Dec : public IOperation
{
public:
	int		CalculateResult()
	{
		return	m_nNuml - m_nNumr;
	}
};


3、工厂类——生成抽象对象

<span style="font-size:14px;">class CClassFactory
{
public:
	CClassFactory() {}
	~CClassFactory() {}
	
	IOperation*	CreateObject(char cOperation)
	{
		IOperation*	poCOperation = NULL;
		switch (cOperation)
		{
		case '+':
			{
				poCOperation = new COperation_Add();
				break;
			}
		case '-':
			{
				poCOperation = new	COperation_Dec();
				break;
			}
			break;
		}
		
		return	poCOperation;
	}
};

4、使用工厂生产对象

void	Test()
{
	CClassFactory	oCClassFactory;
	IOperation*		poIOperation = NULL;

	poIOperation = oCClassFactory.CreateObject('+');
	
	if (poIOperation)
	{
		poIOperation->SetNum(2, 3);
		printf("2 + 3 = %d\n", poIOperation->CalculateResult());
		
		delete poIOperation;
	}
}

简单工厂模式的好处在于将具体对象的产生过程进行了封装,用户不需要关系这个对象怎么来的,只需要just use it,同时有了对象工厂这个中间人,可以根据需要替换掉相应的对象,使用更加灵活。但简单工厂模式中,判断该产生何种对象时,采用了switch结构,如果需要改动或者增减对象时,需要改动switch结构的代码,不符合开放—封闭原则,即函数、类不可以修改,只能扩展。如何解决此问题,请看下回分解(大话设计模式C++版——表驱动法改造简单工厂模式)



大话设计模式C++版——简单工厂模式

标签:设计模式   工厂模式   简单工厂模式   c++   

原文地址:http://blog.csdn.net/gufeng99/article/details/45932177

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!