本文主要介绍简单工厂模式与抽象工厂模式。以下如有叙述不当之处,欢迎批评指正,欢迎交流探讨。
一:简单工厂模式
在23种设计模式中,简单工厂模式其实是不在列的,但理解该模式对于抽象工厂模式的思想理解是有帮助的。就纯粹从字面上理解,简单工厂模式就是一种简单版的工厂模式。在日常开发过程中,相信绝大多数人都使用过。它主要是在设计上将一种产品或一系列具有相互关系的产品的创建工作,由专门设计好的类(即:工厂类)统一提供相关接口来完成。这样,在上下文中所面对的产品类的创建工作将是“隐式的”,不会直接产生对某个或某些具体产品类的依赖。
简单工厂模式是指为创建一系列相关或相互依赖的对象提供接口,使得上下文脱离对具体产品类的直接依赖。类关系图参考如下:
根据上面关系图,模式的编码结构参考如下:
1 namespace simple_factory 2 { 3 /****************************************************************************** 4 * create : (jacc.kim) [5-15-2016] 5 * summary : 产品A 6 ******************************************************************************/ 7 class IAbstractProductA 8 { 9 public: 10 enum class eType {}; 11 };//class IAbstractProductA 12 13 class ConcreteProductA1 : public IAbstractProductA {}; 14 class ConcreteProductA2 : public IAbstractProductA {}; 15 16 /****************************************************************************** 17 * create : (jacc.kim) [5-15-2016] 18 * summary : 产品B 19 ******************************************************************************/ 20 class IAbstractProductB 21 { 22 public: 23 enum class eType {}; 24 };//class IAbstractProductB 25 26 class ConcreteProductB1 : public IAbstractProductB {}; 27 class ConcreteProductB2 : public IAbstractProductB {}; 28 29 /****************************************************************************** 30 * create : (jacc.kim) [5-15-2016] 31 * summary : 简单工厂 32 ******************************************************************************/ 33 class SimpleFactory 34 { 35 public: 36 IAbstractProductA* createProductA(const IAbstractProductA::eType) {} // 参数可选 37 IAbstractProductB* createProductB(const IAbstractProductB::eType) {} // 参数可选 38 };//class SimpleFactory 39 40 }//namespace simple_factory