阅读量:0
单例模式是一种创建型设计模式,它确保类只有一个实例,并提供一个全局访问点来访问这个实例。
在单例模式中,类的构造函数被设为私有,这样外部代码就无法直接实例化该类。而是通过类的静态方法来获取类的唯一实例。如果该类的实例还不存在,则静态方法会创建一个新实例并返回,否则直接返回已经存在的实例。这样可以确保在整个应用程序中只有一个特定类的实例存在。
单例模式的特点:
- 单例类只有一个实例对象
- 类中有一个获取实例的静态方法,可以全局访问
主要解决:全局使用的类频繁的创建与销毁
优点:避免对资源的多重占用,在内存中只有一个实例,减少内存的开销,尤其是频繁的创建和销毁实例
单例模式分类
1. 懒汉式
系统运行中,实例并不存在,只有当需要使用该实例时,才会去创建并使用实例。这种方式要考虑线程安全。
#include<iostream> using namespace sstd; class SingleTonlazy { public://唯一public接口设置为静态,用户不许要创建对象 singleTonlazy* getInstance() { if(pSingleTonlazy == NULL) { pSingleTonlazy = new SingleTonlazy; } return pSingleTonlazy; } private: SingleTonlazy() { } private: static SingleTonlazy* pSingleTonlazy; }; SingleTonlazy* SingleTonlazy::pSingleTonlazy = NULL;//TestA类的外部初始化操作 int main() { SingleTonlazy::getInstance(); return 0; }
2. 饿汉式
系统一运行,就初始化创建实例,当需要时,直接调用即可。这种方式本身就线程安全,没有多线程的线程安全问题
class SingletonHungry { public: static SingletonHungry* getInstance() { return pSingleHungry; } private: SingletonHungry() { cout<<"饿汉式构造函数被调用"<<endl; } private: static SingletonHungry* pSingleHungry; }; //类外部初始化时直接创造对象 SingletonHungry* SingletonHungry::pSingleHungry == new SingletonHungry; int main() { SingletonHungry* pObject = SingletonHungry::getInstance(); return 0; }