【HeadFirst 设计模式】单例模式的C++实现

ops/2024/9/23 6:32:22/

一、案例背景

书中给了一个巧克力工厂的例子,但是个人觉得关于单例模式书中给的例子过于简单,想要深入了解单例模式的小伙伴可以去看看这篇博客:【设计模式单例模式的前世今生

二、案例分析

在很多时候,我们期望代码在运行过程中只实例化一个实例,听起来似乎很简单,但是你不应该想着仅靠个人技术或者团队内的约定去完成这件事。因为这件事从本质上讲是类的设计者的责任,而不能依靠使用这个类的人靠个人技艺去保证单例。单例模式是有发展历程的。最开始的一段时间,当人们设计出单例模式之后,这一模式便被广泛的使用,但随后有一些资深的计算机科学家论证了当时的编程手段实际上无法保证单例,再后来一些编程语言甚至增加了一些关键字去弥补这个漏洞。

三、代码实现

这里给出单例模式的相关案例:

// 巧克力制造工厂
class ChocolateBoiler
{
private:bool boiled = false;bool empty  = true;public:ChocolateBoiler(){init();}void init(){empty  = true;boiled = false;}static ChocolateBoiler* getInstance(){static ChocolateBoiler* instance = new ChocolateBoiler();return instance;}void fill(){// 锅炉为空时填充原料if (isEmpty()){empty  = false;boiled = false;}}void drain(){// 锅炉非空肯已经加热过,取出原料if (!isEmpty() && isBoiled()){empty = true;}}void boil(){// 加热原料,iff 非空且未加热if (!isEmpty() && !isBoiled()){boiled = true;}}const bool isEmpty() const{return empty;}const bool isBoiled() const{return boiled;}
};int main(){ChocolateBoiler* boiler = ChocolateBoiler::getInstance();return 0;
}

http://www.ppmy.cn/ops/96849.html

相关文章

证书|“机器学习工程师”来了,由工业和信息化部教育与考试中心颁发,含金量高

“机器学习工程师”职业技术考试是由工业和信息化部教育与考试中心推出人才考核标准,在互联网、零售、金融、电信、医学、旅游等行业均有涉及,是专门从事数据采集、数据分析、机器学习、人工智能并能制作业务报告、提供决策的新型数据分析人才所需要的技…

Docker无法拉取镜像解决方案

vi /etc/docker/daemon.json添加如下配置 {\ "registry-mirrors": \["<https://hub.uuuadc.top>", "<https://docker.anyhub.us.kg>", "<https://dockerhub.jobcher.com>", "<https://dockerhub.icu>&q…

解锁黑科技!百度AppBuilder助你秒变开发者,轻松实现文心一言

在数字化浪潮席卷全球的今天&#xff0c;人工智能&#xff08;AI&#xff09;和大模型技术正以前所未有的速度改变着我们的世界。从自然语言处理到图像识别&#xff0c;从智能推荐到自动化决策&#xff0c;大模型以其强大的数据处理能力和学习能力&#xff0c;正成为推动科技创…

webpack和vite分别是什么,优势

Webpack 和 Vite 是两种常用的前端构建工具&#xff0c;它们各自有不同的工作方式和优点&#xff0c;适用于不同的开发场景。 1. Webpack Webpack 是一个功能强大的 JavaScript 模块打包工具。它通过静态模块分析&#xff0c;将项目的所有资源&#xff08;JavaScript、CSS、图…

数据结构——关于队列

1.队列的概念及结构 队列&#xff1a;只允许在一端进行插入数据操作&#xff0c;在另一端进行删除数据操作的特殊线性表&#xff0c;队列具有先进先出的特性 入队列&#xff1a;进行插入操作的一端称为队尾 出队列&#xff1a;进行删除操作的一端称为队头 2.队列的…

Linux Bridge VLAN

一、Linux Bridge VLAN &#xff08;1&#xff09;是什么&#xff1f; Bridge 是什么 VLAN 是什么 LINUX BRIDGE VLAN又是什么&#xff1f;——> &#xff08;2&#xff09;解决什么问题&#xff1f;【应用场景】 应用背景 已一个实际问题引出 【应用场景】&#xff1a; 【…

深入理解 Go 语言原子内存操作

原子内存操作提供了实现其他同步原语所需的低级基础。一般来说,你可以用互斥体和通道替换并发算法的所有原子操作。然而,它们是有趣且有时令人困惑的结构,应该深入了解它们是如何工作的。如果你能够谨慎地使用它们,那么它们完全可以成为代码优化的好工具,而不会增加复杂性…

浅谈JVM

JVM&#xff08;Java Virtual Machine&#xff0c;Java虚拟机&#xff09; JVM是Java程序能够跨平台运行的关键所在。 JVM是一个虚拟的计算机&#xff0c;它模拟了真实计算机的各种硬件功能。其主要作用是加载.class字节码文件&#xff0c;并执行其中的指令。 以下是JVM的一…