书中以巧克力工厂的巧克力锅炉加热器为例,介绍了单例模式的实现及优化的方法
单例模式实现
class ChocolateBoiler:
boiled = None
@classmethod
def get_instance(cls):
if cls.boiled:
cls.boiled = cls()
return cls.boiled
boiled = ChocolateBoiler.get_instance()
代码存在的问题:
当使用多线程时,有时候会导致多个对象的出现。(因为代码执行顺序的问题,如果两个线程的代码先后执行了if cls.boiled
的判断)
粗暴的优化方式:
class ChocolateBoiler:
boiled = None
@classmethod
def get_instance(cls):
return cls.boiled
ChocolateBoiler.boiled = ChocolateBoiler()
boiled = ChocolateBoiler.get_instance()
好的优化方式:
加锁
python中更好的实现可以参考https://blog.csdn.net/SixStar_FL/article/details/126894579