news 2026/6/17 0:29:35

单例模式:5种手写实现、优缺点、生产选型

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
单例模式:5种手写实现、优缺点、生产选型

博客导语

单例模式:全局仅有一个实例,重复实例化返回同一个对象。适用于日志工具、数据库连接池、全局配置类。整理面试全部5种手写方案,对比线程安全、实现难度。


一、模块导入单例(生产首选,最简单)

Python模块天然单例:模块只会导入一次,全局共享同一个对象,无需手写代码,线程绝对安全,企业90%场景使用。


二、__new__方法重写(入门常用)

class Singleton: __instance = None def __new__(cls, *args, **kwargs): if cls.__instance is None: cls.__instance = super().__new__(cls) return cls.__instance # 多次实例化地址完全一致

缺陷:多线程高并发会出现重复实例,线程不安全


三、线程安全加锁版单例

通过threading锁解决并发冲突,适合多线程爬虫、接口服务


四、装饰器实现单例

通用装饰器,任意类快速转为单例,复用性最强


五、元类metaclass实现单例

底层最高级写法,控制类创建过程,难度最高,面试压轴考点


五类方案选型总结

  1. 生产业务:优先模块单例,零BUG、最简单

  2. 普通单例:__new__写法,单线程使用

  3. 多线程:加锁版单例

  4. 通用复用:装饰器单例

  5. 面试作答:元类单例

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/17 0:26:45

AI搜索引擎引用逻辑的三个新变化:从相关性到可信度的结构性迁移

过去一年,主流AI搜索引擎(如Perplexity、豆包、Kimi)的引用策略发生了根本性转变:它们不再单纯偏好“最相关”的内容,而是转向“最可信”。这一变化直接导致大量精心优化关键词密度的SEO文章被边缘化。一、趋势信号&am…

作者头像 李华
网站建设 2026/6/17 0:25:56

CC-Switch下载、CC-Switch安装、配置教程(2026最新v3.16.1)

CC-Switch v3.16.1 完整下载、安装、配置教程(2026最新) 一、软件基础说明 CC-Switch 是MIT开源免费跨平台工具,用于统一管理 Claude Code、Codex、Gemini CLI、OpenCode 等AI编程工具的API密钥、多模型服务商切换、本地路由、用量统计、MC…

作者头像 李华
网站建设 2026/6/17 0:23:35

MCP23X08/17 GPIO扩展器深度解析:从寄存器配置到多设备实战

1. 项目概述:为什么我们需要GPIO扩展器?在嵌入式开发或者单片机项目中,我们经常会遇到一个头疼的问题:芯片的GPIO(通用输入输出)引脚不够用了。主控芯片的引脚数量是固定的,但项目需求却在不断增…

作者头像 李华
网站建设 2026/6/17 0:23:29

MC9S08GW64开发实战:从电能计量到LCD驱动,手把手掌握嵌入式仪表设计

1. 项目概述与核心价值在工业仪表和能源计量领域,嵌入式系统的设计核心往往围绕着高精度、低功耗和长期稳定性展开。MC9S08GW64这款微控制器,正是飞思卡尔(现恩智浦)为这一细分市场量身打造的利器。它集成了高性能的8位S08内核、高…

作者头像 李华
网站建设 2026/6/17 0:09:07

LlamaIndex安装配置三大陷阱与工程化落地指南

1. 为什么“pip install llama-index”这行命令背后藏着三重陷阱刚接触 LlamaIndex 的人,第一反应几乎都是打开终端敲下pip install llama-index——看起来再简单不过。但我在给二十多个不同技术背景的团队做知识库架构咨询时发现,超过73%的首次安装失败…

作者头像 李华