目的: 保证一个类仅有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享
用途: 系统的日至输出、GUI应用单鼠标、操作系统只能有一个窗口管理器、一台PC连一个键盘、避免两个打印作业同时输出到打印机中等
单例模式通过类本身管理其唯一实例
唯一实例是类的一个普通对象,设计类时,让它只能创建一个实例并提供对此实例的全局访问。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| #include<iostream> using namespace std;
class CSingleton{ private: CSingleton(){} static CSingleton* m_pInstance; public: static CSingleton* GetInstance(){ if(m_pInstance == NULL) m_pInstance = new CSingleton(); return m_pInstance; } }
CSingleton* CSingleton::m_pInstance = NULL;
int main(){ CSingleton* s1 = CSingleton::GetInstance(); CSingleton* s2 = CSingleton::GetInstance(); if(s1 == s2){ cout <<"s1 = s2"<< endl; } return 0; }
|
用户访问唯一实例的方法只有 GetInstance()
成员函数。若不通过,因构造函数私有,故创建实例的尝试都将失败。
GetInstance()
的返回值是这个函数首次被访问时被创建的,所有GetInstance()
之后的调用都返回相同实例的指针。
单例类 CSingleton 有以下特征:
- 有一个指向唯一实例的静态指针 m_pInstance ,并且是私有的
- 有一个公有的函数,可以获取这个唯一的实例,并且在需要的时候创建该实例
- 其构造函数私有,这样就不能从别处创建该类的实例