单例模式

来源:互联网 发布:mac移除应用 编辑:程序博客网 时间:2024/06/16 02:17

单例模式(Singleton),保证一个类仅有一个实例,并提供一个访问它的全局访问点。
当例模式一般分为两种,一种是饿汉式单例,采取静态初始化的方式,它是由类一加载就实例化的对象,所以要提前占用系统资源。

class final Singleton{    private:            Singleton(){};//构造函数声明为private,让外界无法利用new创建实例。            static Singleton singleton;    public:        Singleton* GetInstance()        {            return singleton;        }}

饿汉式单例模式采用的是用空间换时间的方式。
另外一种是懒汉式单例:

class Singleton{    private:        static Singleton *instance;        Singleton(){};    public:        static Singleton *GetInstance()        {            if(instance==NULL)                instance=new Singleton();            return instance;        }}

懒汉式单例除了可以生成唯一实例之外,还可以严格的控制客户怎样访问以及何时访问,是一种用时间换空间的方式。
懒汉式单例模式无法保证线程安全性,调用GetInstance()可能生成多个实例。因此在多线程中需要进行加锁保护。

class Singleton  {  private:      static Singleton* m_instance;      Singleton(){}  public:      static Singleton* getInstance();  };  Singleton* Singleton::getInstance()  {      if(NULL == m_instance)      {          lock();          if(NULL == m_instance)          {              m_instance = new Singleton;          }          unlock();      }      return m_instance;  }