设计模式篇—单例模式
单例模式是保证系统实例唯一性的重要手段。单例模式首先通过将类的实例化方法私有化来防止程序通过其他方式创建该类的实例,然后通过提供一个全局唯一获取该类实例的方法帮助用户获取类的实例,用户只需也只能通过调用该方法获取类的实例。
单调模式的设计保证了一个类在整个系统中间一时刻只有一个实例存在,主要被用于一个全局类的对象在多个地方被使用并且对象的状态是全局变化的场景下。同时,单例模式为系统资源的优化提过了很好的思路,频繁创建和销毁对象都会增加系统的资源消耗,而单例模式保障了整个系统只有一个对象能被使用,很好地节约了资源。
单例模式的实现很简单,每次在获取对象前首先判断系统是否已经有这个单例对象,有则返回,没有则创建。单例模式的创建是私有的,只能有自身创建和销毁,不用需除了该类其他程序使用new关键字创建对象。
懒汉模式(线程安全)
- 懒汉模式在获取对象实例做了加锁操作,所以是安全的
class LazySingleton {
private:
LazySingleton {};
static LazySingleton* instance;
public:
// 加锁
static LazySingleton* GetLazySingleton()
{
if (instance == NULL)
instance = new LazySingleton();
return instance;
}
}
饿汗模式
- 饿汗和懒汉最大的区别是,懒汉模式在第一次调用的时候对象一定是null,然后去实例化对象并赋值。而饿汗直接使用就好。
class LazySingleton {
private:
LazySingleton {};
static LazySingleton* instance = new LazySingleton();;
public:
// 加锁
static LazySingleton* GetLazySingleton()
{
return instance;
}
}