C++设计模式(3):简单工厂模式
2017-08-24 15:34
211 查看
这是一系列的文章,在这些文章的开头会首先介绍这个模式,并稍加讨论。然后介绍类图、结构、以及代码。最后对这个模式进行完整的讨论,包括适用性、应用场景、优缺点、与其他模式的关系等等。
当我们需要创建许多对象,就需要new好多次,能不能有一个类来创建这些对象呢?
这就是工厂模式,工厂模式分为3种:简单工厂、工厂方法以及抽象工厂模式。
简单工厂模式只有一个工厂,这个工厂生产所有具体的产品。即一个工厂,多种操作。
简单工厂的UML类图如下:
结构:
ConcreteProduct1、ConcreteProduct2和ConcreteProduct3继承自Product基类,并实现其具体的操作;
Factory根据不同的条件创建不同的Product对象。
代码:
简单工厂模式适用于:
1、需要创建的对象很多,导致对象的new操作多且杂时,需要使用简单工厂模式;
2、由于对象的创建过程是我们不需要去关心的,而我们注重的是对象的实际操作,所以,我们需要分离对象的创建和操作两部分,如此,方便后期的程序扩展和维护。
优点:
我们将方法的创建过程统一交给工厂来执行,即封装了对象的创建,客户不必知道产品具体是如何生产出来的,这样就有效的降低了模块之间的耦合。
缺点:
当程序需要同时调用多种操作的时候,简单工厂用一个静态函数的方式就不可行了,会出现阻塞和冲突,这种情况下每种操作都需要独立的资源,就需要工厂方法模式了。
与其他模式的关系:
简单工厂模式主要用于创建对象的接口,来解决new操作很多的情况。许多地方都存在这样的问题,比如当我们的策略模式的策略很多时,会增加客户端的压力,而通过与简单工厂的结合,就可以有效避免这种情况。
当我们需要创建许多对象,就需要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操作很多的情况。许多地方都存在这样的问题,比如当我们的策略模式的策略很多时,会增加客户端的压力,而通过与简单工厂的结合,就可以有效避免这种情况。
相关文章推荐
- c++设计模式之简单工厂模式、工厂方法模式、抽象工厂模式
- C++设计模式之简单工厂模式
- 我所理解的设计模式(C++实现)——简单工厂模式(Simple Factory Pattern)
- C++设计模式01——简单工厂模式
- C++设计模式之简单工厂模式
- C++设计模式之简单工厂模式(一)
- 通过例子学设计模式之--简单工厂模式以及使用场景说明(C++实现)
- 「设计模式」简单工厂模式C++版本
- 批注:C++设计模式——简单工厂模式:归类
- C++ 设计模式之——简单工厂模式(SimpleFactoryPattern)
- 简单工厂模式的C++实现——设计模式学习(1)
- 设计模式:简单工厂模式(C++)【看不懂算我输】
- 设计模式-简单工厂模式 C++实现
- 设计模式 - 简单工厂模式(C++)
- 设计模式---简单工厂模式(c++实现)
- 设计模式C++实现-简单工厂模式、工厂方法模式、抽象工厂模式
- C++实现设计模式之 — 简单工厂模式
- C++设计模式之1-工厂模式(简单工厂模式-工厂方法模式-抽象工厂模式)
- C++设计模式之简单工厂模式(二)
- C++设计模式——简单工厂模式