欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 能源 > 【HeadFirst 设计模式】单例模式的C++实现

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

2024/10/24 15:21:05 来源:https://blog.csdn.net/weixin_43717839/article/details/141230993  浏览:    关键词:【HeadFirst 设计模式】单例模式的C++实现

一、案例背景

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

二、案例分析

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

三、代码实现

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

// 巧克力制造工厂
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;
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com