mangos 之设计模式发现

吼一句先:有需要才用模式,不为模式而模式,K.I.S.S

今天忙里偷闲捡起放下了的mangos,看一下mangos的代码,发现了常用的两个模式的应用,一个为Singleton,另一个为Factory。

Singleton配合模版,将单一模式发挥到极致,如下:

  template
        <
        typename T,                              //这个将类型传入
        class ThreadingModel = MaNGOS::SingleThreaded<T>,  
        class CreatePolicy = MaNGOS::OperatorNew<T>,
        class LifeTimePolicy = MaNGOS::ObjectLifeTime<T>
        >
        class MANGOS_DLL_DECL Singleton                    // MANGOS_DLL_DECL 是typedef __declspec(dllexport)

 

通过模版类将要遵循单一原则的类传入Singleton中。剥离类和实现。从而单一模式可以到处使用。比如

       #define  sWorld MaNGOS::Singleton<World>::Instance()             //保证只有一个游戏世界

       #define  sLog MaNGOS::Singleton<Log>::Instance()                    //只有一个日志记录实例

      

 

而Factory 用的是一个注册方法

template<class T, class Key = std::string>
class MANGOS_DLL_DECL FactoryHolder
{
    public:
        typedef ObjectRegistry<FactoryHolder<T, Key >, Key > FactoryHolderRegistry;
        typedef MaNGOS::Singleton<FactoryHolderRegistry > FactoryHolderRepository;

 .........

将类型T,和关键字传入注册类实例ObjectRegistry,并定义了注册自己和解注册的函数

      void RegisterSelf(void) { FactoryHolderRepository::Instance().InsertItem(this, i_key); }
       void DeregisterSelf(void) { FactoryHolderRepository::Instance().RemoveItem(this, false); }

 从而实现可以根据Key的类型,一般是字典方法,即用String代表不同的类实例,建立映射表,将对象注册进工厂中。

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值