一:单例模式#

定义:一个类在全局只有一个实例对象,这个类自行实例化后向整个系统提供这个实例

实现:禁止拷贝与赋值,防止破坏实例的唯一性

缺点:全局状态强,调试困难


  1. 懒汉式单例模式:
 1class Singleton
 2{
 3public:
 4    // 在第一次调用 getSingleton() 才初始化
 5	static Singleton* getSingleton()
 6	{
 7		// 局部静态变量
 8		// 在程序结束后自动释放内存
 9		// 防止内存泄漏
10        // 同时也确保了线程安全
11		static Singleton instance;
12		return &instance;
13	}
14
15private:
16	Singleton() {}
17	~Singleton() {}
18	Singleton(const Singleton&);
19	Singleton& operator=(const Singleton&);
20};
  1. 饿汉式单例模式:
 1class Singleton
 2{
 3public:
 4    static Singleton* getSingleton()
 5    {
 6        return &instance;
 7    }
 8
 9private:
10    Singleton() {}
11    ~Singleton() {}
12    Singleton(const Singleton&);
13    Singleton& operator=(const Singleton&);
14
15    // 饿汉式的实例是定义在类外的
16    // 在 main() 之前进行初始化
17    static Singleton instance;
18};

常见问题:

为什么不直接使用全局变量?

因为使用单例可以控制初始化时机(static 变量在第一次调用时才被初始化),并且单例可以对接口进行封装

二:工厂模式#

定义: