单例模式(Singleton Pattern)是一种常用的设计模式,它属于创建者模式。单例模式只允许有一个实例,通过构造函数私有化的方式隐藏对象创建入口,取而代之的是提供公共接口用于获取类的单例。其应用场景广泛,例如创建管理类(只需要一个管理实体),或者应用于对象需要限定唯一性的场景等。注意不要滥用单例模式,否则会导致代码维护困难。
设计思路:
单例模式首先需要一个私有的、静态的单例对象(或者指针);接着需将构造函数声明为私有;最后开放一个公有接口用于获取这个单例对象(由于外部无法获得本类的一个对象,也就无法调用非静态方法,因此需将本接口声明为静态)。
本文介绍单例模式的两种实现方式(其实还有很多种),懒汉模式和饿汉模式,并且在Window环境下实现简单demo。
1.饿汉模式
饿汉模式在类定义时就创建了单例,seems hungry。使用时通过公共接口直接获取已创建好的这个单例对象,不存在并发创建问题,因此饿汉模式是线程安全的。
饿汉模式demo:
//Singleton.h
#pragma once
class Singleton
{
private:
static Singleton* instance; //静态单例指针
Singleton(); //构造函数声明为私有
public:
static Singleton* getInstance(); //公共接口用于获取单例对象(也可以直接把定义放在这边)
};
//Singleton.cpp
#include <iostream>
#include "