【创建型】Abstract Factory模式 & Factory Method模式
2016-05-17 10:10
148 查看
本文主要介绍简单工厂模式与抽象工厂模式。以下如有叙述不当之处,欢迎批评指正,欢迎交流探讨。
一:简单工厂模式
在23种设计模式中,简单工厂模式其实是不在列的,但理解该模式对于抽象工厂模式的思想理解是有帮助的。就纯粹从字面上理解,简单工厂模式就是一种简单版的工厂模式。在日常开发过程中,相信绝大多数人都使用过。它主要是在设计上将一种产品或一系列具有相互关系的产品的创建工作,由专门设计好的类(即:工厂类)统一提供相关接口来完成。这样,在上下文中所面对的产品类的创建工作将是“隐式的”,不会直接产生对某个或某些具体产品类的依赖。
简单工厂模式是指为创建一系列相关或相互依赖的对象提供接口,使得上下文脱离对具体产品类的直接依赖。类关系图参考如下:
通用工厂类的主要编码结构参考
该通用工厂类不但支持一般工厂模式的功能,还可以支持Cache功能。即:有些功能中,因为对象使用十分频繁,如果每次创建用完后就删除掉,那样将是十分耗性能的。比如:在游戏AI中,肯定会有大量的对象,Buff,技能........,此时cache功能就十分有用。从上面的通用工厂类设计中也可以看出,支持createInstance(); 也支持borrowInstance();与returnInstance();一般情况下,后面两个接口是成对使用的。当然如果是由createInstance()创建出来的对象也return给通用工厂类,Ok,完全没问题。因为它是一个简单意义上的Cache,没有任何其他逻辑上的约束。因此,使用上十分方便。其实有这样的一个通用工厂类,在一定意义上,可以完全取代 Flyweight 设计。
一:简单工厂模式
在23种设计模式中,简单工厂模式其实是不在列的,但理解该模式对于抽象工厂模式的思想理解是有帮助的。就纯粹从字面上理解,简单工厂模式就是一种简单版的工厂模式。在日常开发过程中,相信绝大多数人都使用过。它主要是在设计上将一种产品或一系列具有相互关系的产品的创建工作,由专门设计好的类(即:工厂类)统一提供相关接口来完成。这样,在上下文中所面对的产品类的创建工作将是“隐式的”,不会直接产生对某个或某些具体产品类的依赖。
简单工厂模式是指为创建一系列相关或相互依赖的对象提供接口,使得上下文脱离对具体产品类的直接依赖。类关系图参考如下:
/****************************************************************************** * create : (jacc.kim) [1-14-2016] * summary : class GFProductFactory.custom product factory. ******************************************************************************/ template<typename TIDX, typename TProduct> class GFProductFactory { public: typedef std::function<void()> GFRegister; typedef typename std::function<void(TProduct*)> GFProductDestroyer; public: // clear all instances of cache.(remove from memory really). void clearAllInstance(); public: // create a new concrete produce instance. virtual TProduct* createInstance(const TIDX& id); // (force) borrow a concrete produce instance. virtual TProduct* borrowInstance(const TIDX& id); // return a concrete produce instance that can generate with borrowInstance() or createInstance() method. virtual bool returnInstance(const TIDX& id, TProduct* pProduct); public: virtual ~GFProductFactory(); // some code here........ };//template<typename TIDX, typename TProduct> class GFProductFactory NSGF_END
通用工厂类的主要编码结构参考
该通用工厂类不但支持一般工厂模式的功能,还可以支持Cache功能。即:有些功能中,因为对象使用十分频繁,如果每次创建用完后就删除掉,那样将是十分耗性能的。比如:在游戏AI中,肯定会有大量的对象,Buff,技能........,此时cache功能就十分有用。从上面的通用工厂类设计中也可以看出,支持createInstance(); 也支持borrowInstance();与returnInstance();一般情况下,后面两个接口是成对使用的。当然如果是由createInstance()创建出来的对象也return给通用工厂类,Ok,完全没问题。因为它是一个简单意义上的Cache,没有任何其他逻辑上的约束。因此,使用上十分方便。其实有这样的一个通用工厂类,在一定意义上,可以完全取代 Flyweight 设计。
相关文章推荐
- php语法
- 文本文件比对
- 不管在任何行业,进攻才是最好的防守
- 获取广告标识符ifad
- string怎么转换为char*
- js实现导航菜单点击切换选中时高亮状态
- MySQL 5.1.72安装
- Android自动化测试
- UI控件笔记(五):UI之UIViewController和NSUserDefaults
- Eclipse实用快捷键
- 红外遥控解码
- iOS第三方音频框架TheAmazingAudioEngine使用及音效实现介绍
- Mac/ios 模拟器 测试模拟慢网速
- 【bzoj4554】【Tjoi2016&Heoi2016】【游戏】【二分图】
- Unity逻辑热更新
- Label字间间隔
- DHCP服务
- Bug之Could not find Developer Disk Image
- Android之上下文菜单(ContextMenu)
- STM8 SPI的学习