单件模式(Singleton)

定义:确保一个类只有一个实例,并提供一个全局访问点。

   通过定义来分析单件模式的特点

       1 :单件类只可有一个实例(如何保证在单线程模式和多线程模式下的唯一性呢);

       2 :单件类必须自己创建自己这惟一的实例(那么就必须在类内部进行实例化,一定会有new uniqueInstance()的调用);

       3 :单件类必须给所有其他对象提供这一实例的访问接口(类中提供一个静态方法提对外提供访问点);

  系统编程中需要考虑的问题:

       4:性能问题,多线程模式下在保证唯一性的前提下单纯采用同步锁是否会带来性能问题呢?如何避免?

       5:如果某些单件类在初始化和运行时需要大量的资源,给系统带来比较大的负担的情况下,如何优化呢?

       6: 如何防止编译器的自动优化带来的影响呢?


我们通过如下的方式来满足前面提到的五点:

class Singleton 

{

  public:

          Singleton * getInstance();//满足第三个条件

  private:

          Singleton();

          static volatile Singleton m_instance;  //通过volatile关键字来解决第六点的问题,禁止编译器对变量优化;

}


Singleton::m_instance = NULL; //通过延迟实例化来解决第五点的问题;

Singleton* Singleton::getInstance()

{

           if(m_instance == NULL)

           {

                lock();

                 if(m_instance  == NULL)

                {

                    //通过双重检查和锁定的方式来解决第四点和第一点提到的问题,同时实现线程安全而且性能优越

                    m_instance = new Singleton(); //满足的第二个问题

                }

                unlock();

            }

            return m_instance;

}

Singleton::Singleton()

{

}

你可能感兴趣的:(单件模式(Singleton))