刘刚刚的个人博客

HeadFirst 设计模式--单例模式

创建时间:2022-11-12 17:26:44
更新时间:2022-11-12 17:26:44

有些类应该只有一个对象,如:数据库、日志、硬件对象

书中以巧克力工厂的巧克力锅炉加热器为例,介绍了单例模式的实现及优化的方法

单例模式实现

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

我的名片

昵称:shuta

职业:后台开发(python、php)

邮箱:648949076@qq.com

站点信息

建站时间: 2020/2/19
网站程序: ANTD PRO VUE + TP6.0
晋ICP备18007778号