文章

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