1.简单工厂模式
简单工厂模式属于创建型模式,又叫做静态工厂方法模式, 但不属于23种GOF设计模式之一。简单工厂模式的实质是由一个工厂类根据传入的参数,动态的决定应该创建哪个 产品的实例,这些产品都有一个共同的父类(虚基类)或接口。
1.1角色
工厂角色:简单工厂模式的核心,负责实现具体产品的内部逻辑。创建方法可被外界直接调用。
抽象产品角色:简单工厂模式创建的所有对象的父类,描述所有实例的公共接口。
具体产品角色:简单工厂模式的创建目标。
1.2优缺点
优点:
工厂类是整个设计模式的关键,包含了必要的逻辑判断。用户根据参数直接创建所需要的产品,而不必在乎里面具体的实现细节。
缺点:
工厂类聚集了所有实例的内部逻辑,违反了高内聚责任分配原则;它所创建的类都是事先考虑到的,如果需要添加新的类,则需要改变工厂类。随着系统不断的扩展,新的类会越来越多。这个问题在工厂方法模式中得到一定的解决。
1.3使用场景
1.工厂类负责创建的对象较少,最好是已知的情况;
2.用户只需要知道传入的参数,并不关心逻辑。
3.简单工厂很容易违反高内聚责任分配原则,因此一般只在简单情况下使用。
高内聚责任分配原则:衡量一个模块独立性的标准是内聚,也就是模块内各个元素彼此结合的紧密程度。所谓的高内聚是指一个软件模块是由相关性很强的代码组成,只负责一项任务,也就是单一责任原则。
//算法的父类,抽象出返回结果的接口
class Operation
{
public:
virtual int GetResult() =0;
public:
double m_Num1;
double m_Num2;
};
//工厂类,用于生产相应的算法子类
class OperationFactry
{
public:
OperationFactry(void);
~OperationFactry(void);
public:
static Operation* CreateOperate(int n )
{
switch(n)
{
case 1:
return new OperationAdd;
break;
}
}
};
//算法子类,由工厂类创建,重写父类中的虚函数
class OperationAdd
{
public:
int GetResult();
};