单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点。多线程
一般咱们能够让一个全局变量使得一个对象被访问,但它不能防止客户实例化多个对象,一个最好的办法就是让类自身负责保护它的惟一实例,这个类能够保证没有其它实例能够被建立,而且它能够提供一个访问该实例的方法。函数
单例模式由于Singleton类封装它的惟一实例,这样它能够严格控制客户怎样访问它以及什么时候访问它,简单地说就是对惟一实例的受控访问。spa
实现原理:将构造函数私有化,只提供一个静态方法来建立一个对象。线程
(1) 将构造函数设置成private;code
(2) 声明一个静态的字段,初始化一个实例,返回Singleton对象;对象
(3) 用静态方法或静态属性,返回那个惟一的实例blog
固然,在对象用多线程时,可能会形成建立多个实例,能够给建立对象的过程加锁。class
class Singleton{ public: static Singleton* Instance(); protected: Singleton(){} Singleton(const Singleton &instance){} Singleton& operator=(const Singleton &instance){} private: static Singleton* instance; }; Singleton* Singleton::Instance(){ if(instance == 0) instance = new Singleton; return instance; } Singleton* Singleton::instance = 0;
其实,单例模式中最关键的就是把public的构造函数私有化。这样就把构造对象的实例化的权利交给了类自己,让Singleton来控制类的实例化。固然除了构造函数以外,还须要把类的控制复制函数(拷贝构造函数,赋值运算)私有化,由于客户端没有构造的权利,因此也就没有使用控制复制函数的权利。变量
版权全部,欢迎转载,转载请注明出处!原理