您的位置:首页 > 其它

【创建型】Abstract Factory模式 & Factory Method模式

2016-05-17 10:10 148 查看
本文主要介绍简单工厂模式与抽象工厂模式。以下如有叙述不当之处,欢迎批评指正,欢迎交流探讨。

一:简单工厂模式

在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 设计。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: