avatar

刘刚刚的blog

采菊东篱下,悠然见南山🦥

  • 首页
  • 大模型应用
  • 常用软件/工具
  • Halo
  • 关于
Home HeadFirst 设计模式--单例模式
文章

HeadFirst 设计模式--单例模式

Posted 2022-11-12 Updated 2024-09- 27
By Administrator
2~2 min read

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


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

单例模式实现

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

Head First设计模式
设计模式
License:  CC BY 4.0
Share

Further Reading

Dec 29, 2022

HeadFirst 设计模式--命令模式

命令模式通过封装调用把方法封装起来。

Dec 18, 2022

HeadFirst 设计模式--外观模式(Facade Pattern)

外观模式将一个或者数个类复杂的一切都隐藏在背后,只露出一个干净的外观

Dec 14, 2022

HeadFirst 设计模式--适配器模式(Adapter Design Pattern)

适配器模式将一个接口转化为另外一个接口。

OLDER

HeadFirst 设计模式--工厂模式

NEWER

HeadFirst 设计模式--适配器模式(Adapter Design Pattern)

Recently Updated

  • 文本切分-语义分割(Semantic Chunking)
  • dify 并发配置优化
  • Typing
  • 大模型返回中json_schema与json_mode的区别
  • Async

Trending Tags

Halo 运维 postgresql 设计模式 linux就该这么学 nas rag odoo python 文本切分

Contents

©2025 刘刚刚的blog. Some rights reserved.

Using the Halo theme Chirpy