咨询《Head First设计模式》中ChocolateBoiler多实例的干扰问题
为什么多个ChocolateBoiler实例会引发严重问题?
这个ChocolateBoiler类的设计目标是模拟真实世界里唯一存在的巧克力锅炉——现实场景中你只有一台物理锅炉,所有操作(填充、煮沸、排空)都必须基于这台锅炉的真实状态。如果创建多个实例,每个实例会独立维护自己的empty和boiled状态,完全和真实设备的状态脱节,进而引发各种逻辑混乱甚至现实危险:
- 重复填充:假设实例A调用
fill()把真实锅炉填满,此时A的empty标记为false,但实例B的empty还是初始的true。如果有人通过实例B执行fill(),代码会判定“锅炉为空”允许填充,但真实锅炉已经满了,这会导致原料溢出、损坏设备。 - 重复煮沸:真实锅炉已经完成煮沸(实例A的
boiled为true),但实例B的boiled依然是false。此时通过实例B调用boil(),代码会执行煮沸逻辑,让真实锅炉持续加热,可能引发干烧、爆炸等安全事故。 - 无效/错误排空:实例A排空锅炉后将
empty设为true,但实例B的empty还是false。如果通过实例B尝试排空,代码会认为锅炉内有煮沸后的原料,但实际已经空了;更糟的是,若后续基于实例B的错误状态执行其他操作,会进一步加剧混乱。
本质上,这个类是单例模式的典型应用场景——它对应现实中唯一的实体,必须保证全局只有一个实例,才能让代码状态和真实设备的状态保持一致,避免上述问题。
内容的提问来源于stack exchange,提问作者user2873737
相关产品推荐
相关产品推荐

