python设计模式-单例模式
问题:现代化的巧克力工厂具备计算机控制的巧克力锅炉。锅炉做的事情就是把巧克力和牛奶融在一起,然后送到下一个阶段,以制成巧克力棒。下边是一个巧克力公司锅炉控制器的代码,仔细观察一下,这段代码有什么问题? class ChocolateBoiler(object): def __init__(self): self.empty = True self.boiled = False def fill(self): # 向锅炉填充巧克力和牛奶混合物 # 在锅炉内填充原料时,锅炉必须是空的。 # 一旦填入原料,就要把empty 和 boiled 标志设置好 if self.empty: self.empty = False self.boiled = False def drain(self): # 排出煮沸的巧克力和牛奶 # 锅炉排出时,必须是满的且煮沸的。 # 排出完毕empty 设置为 true if not self.empty and self.boiled: self.empty = True def boil(self): # 将颅内物煮沸 # 煮混合物时,锅炉内必须是满的且没有煮沸过 # 一旦煮沸,就把 boiled 设置为 true if not self.empty and not self.boiled: self.boiled = True 从代码可以看出,他们加入了多种判断,以防止不好的事情发生。如果同时存在两个ChocolateBoiler实例,那这么多判断岂不是失去作用了。那我们改如何实现这个需求呢?这个问题的核心是,我们要先判断实例是不是已经存在,如果存在就不再创建。 _chocolate_boiler_instance = None # 声明实例 def chocolate_boiler(): global _chocolate_boiler_instance # 使用全局变量 if _chocolate_boiler_instance is not None: # 判断是否存在,如果存在,直接返回 return _chocolate_boiler_instance else: # 如果不存在,创建一个新的 _chocolate_boiler_instance = ChocolateBoiler() return _chocolate_boiler_instance 现在我们需要获取 ChocolateBoiler 实例的时候只需要调用 chocolate_boiler 方法获取实例即可保证同时只有一个 ChocolateBoiler实例。 ...