设计模式----简单工厂模式

前段时间比较忙,一直没时间看设计模式,原本计算也被打乱了,只能有空时学习一下,从最简单的简单工厂模式开始吧

1、什么是简单工厂模式

简单工厂模式属于创建型模式,是由一个工厂对象决定创建出哪一类产品类的实例,其实质就是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类的实例

2、实例

下面的代码功能主要是实现一个工厂类,工厂类根据传入的运算符,创建出相应的加法/减法类实例。

首先是创建一个父类运算类:运算类只有两个变量numbeA和numberB,同时构造函数初始化变量值,然后就是一个虚函数,后续由子类实现对应的功能。

//运算类
class Operation
{

public:
	double NumberA;
	double NumberB;
	
	//构造函数,初始化
	Operation()
	{
		NumberA = 2.0;
		NumberB = 1.0;
	}

	//虚函数
	virtual double GetResult()
	{
		double result = 0;
		return result;
	}

};

 然后创建减法类和加法类,继承运算类,实现加法和减法:

//继承运算类的加法类
class OperationAdd : public Operation
{
	double GetResult()
	{
		double result = 0;
		result = NumberA + NumberB;
		return result;
	}
};

//继承运算类的减法类
class OperationSub : public Operation
{
	double GetResult()
	{
		double result = 0;
		result = NumberA - NumberB;
		return result;
	}
};

最后创建工厂类,完成根据运算符创建对应加法/减法实例

//生成实例的工厂类
class OperationFactory
{
public:
	static Operation* CreateOperate(char operate)
	{
		Operation * oper = NULL;
		switch(operate)
		{
		case '+':
			oper = new OperationAdd();
			break;
		case '-':
			oper = new OperationSub();
		}
		return oper;
	}
};

  客户端代码为

//客户端
int main()
{
	//工厂类对象指针
	OperationFactory* factoryA = new OperationFactory();
	
	double resultAdd = 0;
	double resultSub = 0;
	
	//传入运算符'-'
	char operate = '-';
	resultSub = factoryA->CreateOperate(operate)->GetResult();
	
	//传入运算符'+'
	operate = '+';
	resultAdd = factoryA->CreateOperate(operate)->GetResult();
	
	cout << resultAdd << " "<< resultSub <<endl; //结果为3 1

	getchar();
	return 0;
}

3、优缺点

这是一个很好理解的工厂模式实例,工厂模式很好地将业务和界面分离开,如果需要增加其他运算如乘法、除法、开方、平方等运算,只需要增加相应的乘法类、除法类等等,同时在工程类的分支中加入对应类的实例创建分支,对于客户端来讲,业务逻辑是不可见的。但同样也有一定的缺点,由于所有的运算子类实例创建都在一个工厂类中,违背了高内聚原则,如果需要增加其他类,那么必须要改动工厂类的内部实现,并且虽则功能的不断增多,子类增加,判断也增加对系统的维护和扩展不利。

猜你喜欢

转载自www.cnblogs.com/xqn2017/p/9198824.html