一、案例背景
书中给了一个巧克力工厂的例子,但是个人觉得关于单例模式书中给的例子过于简单,想要深入了解单例模式的小伙伴可以去看看这篇博客:【设计模式】单例模式的前世今生
二、案例分析
在很多时候,我们期望代码在运行过程中只实例化一个实例,听起来似乎很简单,但是你不应该想着仅靠个人技术或者团队内的约定去完成这件事。因为这件事从本质上讲是类的设计者的责任,而不能依靠使用这个类的人靠个人技艺去保证单例。单例模式是有发展历程的。最开始的一段时间,当人们设计出单例模式之后,这一模式便被广泛的使用,但随后有一些资深的计算机科学家论证了当时的编程手段实际上无法保证单例,再后来一些编程语言甚至增加了一些关键字去弥补这个漏洞。
三、代码实现
这里给出单例模式的相关案例:
cpp
// 巧克力制造工厂
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;
}