HeadFirst 设计模式--单例模式
有些类应该只有一个对象,如:数据库、日志、硬件对象
书中以巧克力工厂的巧克力锅炉加热器为例,介绍了单例模式的实现及优化的方法
单例模式实现
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
License:
CC BY 4.0