单利设计模式:
概念:保证类只有一个实例,并提供一个访问它的全局访问点
优点:使用单例模式可以避免一个全局使用的类,多次创建和销毁,造成资源浪费
设计要素:
一个私有构造函数(确保只能单例类自己创建实例)
一个私有静态变量(确保只有一个实例)
一个公有静态函数(给使用者提供调用方法)
分类:
懒汉式:先不创建实例,当第一次被调用时,再创建实例
简单实现:
Class Singleton
{
private:
Singleton() {}//构造函数私有化,防止多次实例
static Singleton* uniqueInstance;//提供调用的唯一实例
public:
static Singleton getUniqueInstance()//提供实例接口
{
if (!uniqueInstance)
uniqueInstance = new Singleton();
return uniqueInstance;
}
};
优点:
延迟了实例化,当需要使用时才实例化,节省了系统资源
缺点:
线程不安全,如果多线程同时进入if语句,会创建多个实例
优化:
在静态函数前上锁,防止多线程同时执行该函数
饿汉式:无论是否需要该实例都先创建该实例,使用时可直接调用
简单实现:
Class Singleton
{
private:
Singleton() {}//构造函数私有化,防止多次实例
static Singleton* uniqueInstance = new Singleton();//提供调用的唯一实例,并在此初始化
public:
static Singleton getUniqueInstance()//提供实例接口
{
return uniqueInstance;
}
};
优点:
已实例化好一个实例,不会出现线程安全问题
缺点:
若没有及时使用或是不使用,会造成系统资源浪费
参考:代码随想录整理