设计模式——单例模式

懒汉模式

cpp 复制代码
class Singleton_lazy
{
public:
	static Singleton_lazy* get()
	{
		if (sl == nullptr)
		{
			sl= new Singleton_lazy;
		}
		return sl;
	}
	class Garbo
	{
		~Garbo()
		{
			if(sl)
			delete sl;
		}
	};
private:
	Singleton_lazy(){}
	static Singleton_lazy* sl;
	static Garbo garbo;
};
Singleton_lazy* Singleton_lazy::sl = nullptr;

饿汉模式

cpp 复制代码
class Singleton_hungry
{
public:
	static Singleton_hungry* get()
	{
		return sh;
	}
	class Garbo
	{
		~Garbo()
		{
			if(sh)
			delete sh;
		}
	};
private:
	Singleton_hungry() {}
	static Singleton_hungry* sh;
	static Garbo garbo;
};
Singleton_hungry* Singleton_hungry::sh = new Singleton_hungry;

注:

1.把构造函数私有,是避免类外进行创建该对象。

2.把成员私有,避免类外直接对该静态成员进行赋值或者其他操作。

3.把成员写成静态是因为静态成员每个类只存在一份,保证了单例。

4.饿汉模式直接创建对象,该行为发生在main函数创建之前。

5.饿汉式是线程安全的,在类创建的同时就已经创建好一个静态的对象供系统使用,以后不在改变,懒汉式不一定。

6.Garbo是垃圾回收类,当garbo对象出了作用域调用析构函数释放时,会顺带释放单例对象的资源。当然这个操作不是必要的,毕竟所占内存也特别小。

相关推荐
NG47715 小时前
【软件设计与体系结构】-策略设计模式
java·设计模式·软件工程
CaffeinePro17 小时前
SOLID五大设计原则:重构优雅代码与架构的底层规范
设计模式·架构
饮茶三千17 小时前
电子保函模板编辑器实战二:HTML→FTL 编译转换的设计与实现
前端·vue.js·设计模式
Kel18 小时前
Node.js 本质:从全脉络视角理解运行时原理
javascript·设计模式·node.js
码哥字节19 小时前
11 万 Star 的 Spec Kit,90% 的工程师只用它解决了 10% 的问题
设计模式·vibe coding·github spec kit
我登哥MVP19 小时前
走进 Gang of Four 设计模式:访问者模式
java·设计模式·访问者模式·原型模式
ttod_qzstudio21 小时前
【软考设计模式】状态模式:状态驱动行为自动转换与代码填空精讲
设计模式·状态模式
饮茶三千21 小时前
基于 WangEditor 的富文本编辑器定制实践
前端·vue.js·设计模式
ttod_qzstudio1 天前
【软考设计模式】中介者模式:网状交互的解耦与集中调度精讲
设计模式·中介者模式
饼干哥哥2 天前
一夜之间,全世界的 Agent 能力提高了一个档次
设计模式·agent·代码规范