单例模式也称单子模式、单件模式,通过单例模式可以保证系统中只有一个类一个实例,并提供全局的访问点,对很多系统中的某些类来说,只有一个实例很重要,比如,一台打印机可以有多个任务,但是正在工作的只有一个,一个系统只能有一个窗口管理器或文件系统。
单例模式的特点:
1.只能有一个实例;
2.必须自行创建这个实例;
3.必须向整个系统提供这个实例。
从具体实现角度来说,就是以下三点: 1. 单例模式的类只提供私有的构造函数 2. 类定义中含有一个该类的静态私有对象 3. 该类提供了一个静态的公有的函数用于创建或获取它本身的静态私有对象
单例模式的一些注意点
一 实例控制: 单例模式会阻止其他对象实例化自己的单例对象的副本,从而确保所有对象都访问唯一实例
二 灵活性: 因为类控制实例化过程,所以类可以灵活更改实例化过程
三 开销: 虽然数量很少,但如果每次对象请求引用时都要检查是否存在类的实例,将仍然需要一些开销,这个问题可以通过静态初始化解决此问题
定义一个私有的静态指针m_sInstance,和一个公有的静态函数 GetInstance()
单例模式又分为饿汉式单例和懒汉式单例,饿汉式单例在单例类被加载时就实例化一个对象交给自己的引用;而懒汉式在调用取得实例方法的时候才会实例化对象
单例模式的优点:
1. 在内存中只有一个对象,节省内存空间
2. 避免频繁的创建销毁对象,可以提高性能
3. 避免对共享资源的多重占用
4. 可以全局访问
单例模式的适用场景:
1. 需要频繁实例化然后销毁的对象
2. 创建对象耗时过多或者耗资源过多,但又经常用到的对象
3. 有状态的工具类对象
4. 频繁访问数据库或文件的对象
5. 以及其他要求只有一个对象的场景