您的位置:首页 > 编程语言 > C语言/C++

C++设计模式(3):简单工厂模式

2017-08-24 15:34 211 查看
这是一系列的文章,在这些文章的开头会首先介绍这个模式,并稍加讨论。然后介绍类图、结构、以及代码。最后对这个模式进行完整的讨论,包括适用性、应用场景、优缺点、与其他模式的关系等等。

当我们需要创建许多对象,就需要new好多次,能不能有一个类来创建这些对象呢?

这就是工厂模式,工厂模式分为3种:简单工厂、工厂方法以及抽象工厂模式。

简单工厂模式只有一个工厂,这个工厂生产所有具体的产品。即一个工厂,多种操作。

简单工厂的UML类图如下:



结构:

ConcreteProduct1、ConcreteProduct2和ConcreteProduct3继承自Product基类,并实现其具体的操作;

Factory根据不同的条件创建不同的Product对象。

代码:

class Operation
{
public:
double numberA, numberB;
virtual double  getResult()
{
return 0;
}
};

class addOperation :public Operation
{
double getResult()
{
return numberA + numberB;
}
};

class subOperation :public Operation
{
double getResult()
{
return numberA - numberB;
}
};

class mulOperation :public Operation
{
double getResult()
{
return numberA*numberB;
}
};

class divOperation :public Operation
{
double getResult()
{
return numberA / numberB;
}
};

class operFactory
{
public:
static Operation *createOperation(char c)
{
switch (c)
{
case '+':
return new addOperation;
break;

case '-':
return new subOperation;
break;

case '*':
return new mulOperation;
break;

case '/':
return new divOperation;
break;
}
}
};

int main()
{
Operation *oper = operFactory::createOperation('-');
oper->numberA = 9;
oper->numberB = 99;
cout << oper->getResult() << endl;
return 0;
}


简单工厂模式适用于:

1、需要创建的对象很多,导致对象的new操作多且杂时,需要使用简单工厂模式;

2、由于对象的创建过程是我们不需要去关心的,而我们注重的是对象的实际操作,所以,我们需要分离对象的创建和操作两部分,如此,方便后期的程序扩展和维护。

优点:

我们将方法的创建过程统一交给工厂来执行,即封装了对象的创建,客户不必知道产品具体是如何生产出来的,这样就有效的降低了模块之间的耦合。

缺点:

当程序需要同时调用多种操作的时候,简单工厂用一个静态函数的方式就不可行了,会出现阻塞和冲突,这种情况下每种操作都需要独立的资源,就需要工厂方法模式了。

与其他模式的关系:

简单工厂模式主要用于创建对象的接口,来解决new操作很多的情况。许多地方都存在这样的问题,比如当我们的策略模式的策略很多时,会增加客户端的压力,而通过与简单工厂的结合,就可以有效避免这种情况。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  工厂模式