Singleton模式

来源:互联网 发布:网络信息保密协议书 编辑:程序博客网 时间:2024/06/05 23:48

Singleton模式分为两种模式,懒汉模式和饿汉模式。顾名思义,懒汉模式就是在需要类的对象时再去产生对象,而饿汉模式就是在类初始化时就已经产生了一个类对象,不管我们需不需要这个对象,这个对象自始至终就在那里。
懒汉模式:
优点:可以实现延迟实例化
缺点:多线程环境下需要特殊处理、较饿汉模式有性能问题。

饿汉模式:
优点:不用考虑多线程问题,也有比较好的性能
缺点:不能实现延迟实例化

写法一、只适用于单线程环境懒汉模式

//只适用于单线程的懒汉模式class Singleton1{public:    static Singleton1 *getInstance()    {        if ( instance == NULL )         {            instance = new Singleton1();        }        return instance;    }private:    Singleton1() {}    static Singleton1 *instance;};Singleton1 *Singleton1::instance = NULL;

写法二、懒汉模式在多线程环境下的几种解决方案

//性能不足的加锁处理class  Singleton2{public:    static Singleton2 *getInstance()    {        lock();        if ( instance == NULL )        {            instance = new Singleton2();        }        unlock();        return instance;    }private:    Singleton2() {}    static Singleton2 *instance;};Singleton2 *Singleton2::instance = NULL;
//最理想的加锁处理 双检锁class Singleton3{public:    static Singleton3 *getInstance()    {        if ( instance == NULL )        {            lock();            if ( instance == NULL )            {                instance = new Singleton3();            }            unlock();        }        return instance;    }private:    Singleton3() {}    static Singleton3 *instance;};Singleton3 *Singleton3::instance = NULL;

写法三、饿汉模式

//饿汉模式class Singleton4{public:    static Singleton4 *getInstance()    {        return instance;    }private:    Singleton4() {}    static Singleton4 *instance;};Singleton4 *Singleton4::instance = new Singleton4();