单例模式,又称单件模式。
定义:确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。它是一种常用的设计模式,它属于创建者模式。单例模式只允许有一个实例,通过构造函数私有化的方式隐藏对象创建入口,取而代之的是提供公共接口用于获取类的单例。其应用场景广泛,例如创建管理类(只需要一个管理实体),或者应用于对象需要限定唯一性的场景等。注意不要滥用单例模式,否则会导致代码维护困难。
细节
- 一个类只允许创建唯一的对象
- 禁止在类的外部创建对象:私有化构造函数:private或protected
- 类的内部维护唯一对象:静态成员变量
- 提供访问单例对象的方法:静态成员函数,返回在类内部唯一构造的实例
创建方式
- 饿汉式:单例对象无论用或不用,程序启动即创建。
- 懒汉式:单例对象在用的时候再创建,不用即销毁。
C++代码
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 28 29 30 31 32 33 34 |
#include <iostream> using namespace std; class Singleton{ public: static Singleton *GetInstance(){ if (m_Instance == NULL ){ m_Instance = new Singleton (); cout<<"实例生成!"<<endl; }else cout<<"实例已有!"<<endl; return m_Instance; } static void DestoryInstance(){ if (m_Instance != NULL ){ delete m_Instance; m_Instance = NULL ; cout<<"实例消除成功!"<<endl; } } private: Singleton(){ } static Singleton *m_Instance; }; Singleton *Singleton::m_Instance = NULL; int main() { Singleton *singletonObj1 = Singleton::GetInstance(); Singleton *singletonObj2 = Singleton::GetInstance(); Singleton::DestoryInstance(); return 0; } |