首页 > 其他 > 详细

简单工厂模式

时间:2014-02-20 14:00:56      阅读:347      评论:0      收藏:0      [点我收藏+]

时间:2014.02.19

地点:基地

--------------------------------------------------------------------------------

一、简述

  简单工厂模式属于属于创建型模式,简单实用,它是由一个工厂对象决定创建哪一种产品类的实例。例如我们定义一类产品,这类产品具体是IPhone和IPad,当客户需要IPhone时告诉工厂,工厂就生产返回一个IPhone给客户,当客户需要IPad时也告诉工厂,工厂就生产返回一个IPad给客户。

--------------------------------------------------------------------------------

二、简单工厂模式角色

1.工厂角色

  模式的核心,负责生产实例,工厂类可被客户端调用,客户需要什么告诉工厂即可,而无需关注产品细节。

2.抽象产品角色

  简单工厂模式所创建的所有产品的父类,负责描述所有实例所共有的公共接口。

3.具体产品角色

  创建目标,即具体产品类的实例。

--------------------------------------------------------------------------------

三、使用场景

  1.工厂负责创建的对象较少

  2.客户只知道传入工厂的参数,而并不关心如何创建

  3.由于违反高内聚责任分配原则,故一般只用于简单场景

--------------------------------------------------------------------------------

四、优点缺点

  优点:客户端只传入类或识别符即可,无须关心具体创建过程,只顾消费就可,即各角色分工明确,这样有利于软件架构。

  缺点:违反高内聚责任分配原则,它将全部逻辑放到一个工厂类中,但若需要添加新类,则须对工厂类逻辑进行修改,并且,该简单工厂只提供一个系列的产品,若是其他系列产品,他们没有共同的父类或接口,那么则该换用其他模式。

--------------------------------------------------------------------------------

五、简单工厂模式实例

  假设客户端需要对两个数进行算数操作,有时需要加法,有时需要减法,或者乘法,除法均有可能。更需要而定,啊,我们其他需要加法时告诉工厂我们需要一个加法器,需要乘法时告诉工厂需要乘法器,工厂就会给我们生产。

简单的实例代码如下:

#include<string>
#include<iostream>
using namespace std;
//抽象产品角色
class COperation{
public:
	int m_nFirst;
	int m_nSecond;
	virtual double GetResult(){
		double dResult = 0;
		return dResult;
	}
};
//具体产品角色
class AddOperation :public COperation{
public:
	virtual double GetResult(){
		return m_nFirst + m_nSecond;
	}
};
class SubOperation :public COperation{
public:
	virtual double GetResult(){
		return m_nFirst - m_nSecond;
	}
};
class MultiOperation :public COperation{
public:
	virtual double GetResult(){
		return m_nFirst*m_nSecond;
	}
};
class DiviOperation :public COperation{
public:
	virtual double GetResult(){
		return m_nFirst / m_nSecond;
	}
};
//工厂角色
class CalculatorFactory{
public:
	static COperation* Create(char COperator);
};
COperation* CalculatorFactory::Create(char Coperator){
	COperation *oper;
	switch (Coperator){
	case ‘+‘:
		oper = new AddOperation();
		break;
	case ‘-‘:
		oper = new SubOperation();
		break;
	case ‘*‘:
		oper = new MultiOperation();
		break;
	case ‘/‘:
		oper = new DiviOperation();
		break;
	default:
		oper = new AddOperation();
	}
	return oper;
}
//客户
int main(){
	int a, b;
	cin >> a >> b;
	COperation *op = CalculatorFactory::Create(‘-‘);
	op->m_nFirst = a;
	op->m_nSecond = b;
	cout << op->GetResult() << endl;
	return 0;
}


简单工厂模式

原文:http://blog.csdn.net/u012333003/article/details/19504785

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!