单例模式简介
单例模式(Singleton),保证一个类仅有一个实例,并提供一个访问它的全局访问点。
通常我们可以让一个全局变量使的一个对象被访问,但它不能防止你实例化多个对象。一个最好的方法就是,让类自身负责保存它的唯一实例。这个类可以保证没有其他实例可以被创建,并且它可以提供一份访问该实例的方法。
单例模式因为Singleton类封装它的唯一实例,这样它可以严格地控制客户怎样访问它以及何时访问它。简单的说就是对唯一实例的受控访问。
多线程的单例,需要用lock确保当一个线程位于代码的临界区时,另一个线程不能进入临界区。如果其他线程进入锁定的临界区,则它将一直等待,直到该锁被释放。
单例模式UML类图
C++代码实现
// Singleton类 #ifndef _SINGLETON_HPP #define _SINGLETON_HPP class Singleton{ public: static Singleton* getInstance(){ if(nullptr == pInstance) { pInstance= new Singleton(); } return pInstance; } private: Singleton(){}; static Singleton* pInstance; }; Singleton* Singleton::pInstance = nullptr; // cpp 静态变量不允许类内初始化,必须类外。 #endif
// 客户端程序 #include<iostream> #include"singleton.hpp" using namespace std; int main(){ Singleton* p1 = Singleton::getInstance(); Singleton* p2 = Singleton::getInstance(); if(p1 == p2 && p1){ cout << "p1 and p2 pointers to the same instance which is not null"<<endl; } getchar(); return 0; }