6. 单件模式

来源:互联网 发布:js判断select是否选中 编辑:程序博客网 时间:2024/06/03 13:17
     单件模式的特点很鲜明,确保在整个系统中只能实例化一个对象,并提供全局访问点。并且在下面的写法(1)和(3)中是在使用的时候才去创建对象,“延时实例化”,对于很占内存的对象来讲是有利的。当然在使用它的时候要考虑多线程的问题。
     总结起来有三种写法:
(1)加锁,因为加了lock,只能有一个线程获取到这个lock,其他的线程只能等待。所以在对性能要求不高的时候可以使用。 
class Singleton{private:     static Singleton *uniqueSingleton;public:     static Singleton GetInstance()     {          Lock lock;          if(uniqueSingleton == NULL)                uniqueSingleton = new Singleton();          return uniqueSingleton;     }};
(2)在初始化对象时,先创建singleton对象。这样就避免了多线程带来的问题。只是不能延时创建对象。 
class Singleton{private:     static Singleton *uniqueSingleton = new Singleton();public:     static Singleton GetInstance()     {          return uniqueSingleton;     }};
(3)双检查锁+volatile, 注意要防止双检查锁失效 
class Singleton{private:     static volatile Singleton *uniqueSingleton;public:     static Singleton GetInstance()     {          if(uniqueSingleton == NULL)          {               Lock lock;               if(uniqueSingleton == NULL)                     uniqueSingleton = new Singleton();          }          return uniqueSingleton;     }};

参考文献:
http://blog.jobbole.com/52164/


原创粉丝点击