时间: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