Loki的SingletonHolder解析

来源:互联网 发布:ios软件开发是什么 编辑:程序博客网 时间:2024/05/21 08:36

不得不说说Loki这个库还是相当厉害的,采用模板的方式实现了很多的设计模式,例如单体模式、策略模式、访问者模式、工厂模式等。下面从Loki库入门的设计模式介绍一下,

Loki的单体模板类设计的非常强大,通过策略模式将单体的各个组件给模块化了,非常厉害,如下:

  template
    <
        typename T,
        template <class> class CreationPolicy = CreateUsingNew,
        template <class> class LifetimePolicy = DefaultLifetime,
        template <class, class> class ThreadingModel = LOKI_DEFAULT_THREADING_NO_OBJ_LEVEL,
        class MutexPolicy = LOKI_DEFAULT_MUTEX
    >
    class SingletonHolder

SingletonHolder的模板参数主要是创建策略、生命周期策略和线程模型。

1.创建策略默认使用new操作符来创建对象,当然也可以使用C语言的内存分配来创建CreateUsingMalloc或则CreateStatic,也可以从这些模板创建方法中派生出自己的创建策略,但是一定要实现里面的函数接口,例如有一个参数的构造类,可以像如下这样来编写自己的创建类

class CreateUsingOneNew : public CreateUsingNew

{

public:

        static T* Create()
        { return new T(xxx); }
        
        static void Destroy(T* p)
        { delete p; }

}

必须要实现的是Create、和Destory函数。

2.生命周期,由于单体是在程序的运行期会一直存在,那么其生命周期默认是程序结束之后析构对象,其默认的就是如此DefaultLifetime,针对某些特殊的情况,多个单体对象,但是在析构的时候需要区分优先级,这时可以使用PhoenixSingleton规则来决定其对象释放的先后顺序。

3.线程模式,主要针对咱们的应用程序的类型,如果应用程序使用了多线程则需要线程安全模式,否则以单线程来执行即可。

4.其他的单体实现方式,也可以通过继承的结构来实现,模板类传入子类的名称即可,见如下简写代码

template<class T>

class BaseSingleton

{

public:

T instance()

{

static T instance();

return instance;

}

private:

BaseSingleton& operator=(const BaseSingleton&);

BaseSingleton(const BaseSingleton&);

}


class DerivedSingleton : public BaseSingleton<DerivedSingleton>

{}








0 0
原创粉丝点击