news 2026/9/30 13:21:15

25、软件设计模式:单例反模式与依赖注入

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
25、软件设计模式:单例反模式与依赖注入

软件设计模式:单例反模式与依赖注入

1. 引言

在软件设计领域,有许多设计模式可以帮助开发者构建出更优质、更易维护的软件系统。其中,依赖注入(Dependency Injection)被认为是一种能够显著提升软件设计质量的重要模式,甚至可被视为改变游戏规则的关键因素。在深入探讨依赖注入之前,我们先来认识一个对良好软件设计有害的模式——单例模式(Singleton)。

2. 单例反模式

单例模式乍一看是一种简单且广泛使用的设计模式,不仅在C++领域如此。它常被用于日志记录器(Loggers)、数据库连接、中央用户管理,以及代表物理世界的事物(如USB或打印机接口等硬件)。此外,工厂(Factories)和所谓的实用工具类(Utility Classes)也经常被实现为单例。然而,实用工具类的单例实现本身就是一种代码异味,因为这暗示着低内聚性。

设计模式的作者们曾被记者多次询问是否会修订书籍并发布新版本,他们通常的回答是认为书中内容仍然基本有效,无需修订。但在一次与在线期刊InformIT的访谈中,他们给出了更详细的回答。其中,Erich Gamma表达了对单例模式的看法,他认为单例模式的使用几乎总是一种设计缺陷。

单例模式的目标是确保一个类只有一个实例,并提供对该实例的全局访问点。但这一目标包含两个明显的问题:
-生命周期管理与业务逻辑未分离:根据关注点分离原则,对象的生命周期管理应与特定领域的业务逻辑相互独立。但在单例模式中,这两个关注点基本没有分离。
-全局访问的隐患:在面向对象的上下文中,“全局访问点”这种说法显得可疑,容易引发问

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

28、C++设计模式与惯用法详解

C++设计模式与惯用法详解 1. 货币类设计考量 在设计货币类时,有几个关键因素需要考虑: - 标准考量 :例如,必须考虑ISO 4217国际货币代码标准。 - 用户显示 :思考如何将货币值展示给用户。 - 转换频率 :明确货币转换的发生频率。 从测试角度来看,为货币类实现…

作者头像 李华
网站建设 2026/9/29 7:09:52

29、设计模式与惯用法及UML基础指南

设计模式与惯用法及UML基础指南 在软件开发中,设计模式和惯用法是提高代码质量和可维护性的重要手段,而UML(Unified Modeling Language)则是用于可视化和文档化软件系统设计的标准图形语言。下面将详细介绍几种常见的设计惯用法以及UML的基本元素。 复制交换惯用法(Copy…

作者头像 李华
网站建设 2026/9/27 20:14:53

博德之门3脚本扩展器:5分钟学会游戏深度自定义的终极方案

博德之门3脚本扩展器:5分钟学会游戏深度自定义的终极方案 【免费下载链接】bg3se Baldurs Gate 3 Script Extender 项目地址: https://gitcode.com/gh_mirrors/bg/bg3se 想要彻底改变你的博德之门3游戏体验吗?BG3SE脚本扩展器正是你需要的强大工具…

作者头像 李华
网站建设 2026/9/26 19:22:42

PaddlePaddle镜像中的模型鲁棒性增强方法

PaddlePaddle镜像中的模型鲁棒性增强方法 在金融票据识别系统中,一张模糊、反光甚至被恶意篡改的扫描图像,可能让训练精度高达98%的OCR模型彻底“失明”。类似场景在工业质检、医疗影像分析和自动驾驶中屡见不鲜——理想实验室环境下的高分模型&#xff…

作者头像 李华
网站建设 2026/9/27 7:58:40

掌握SH1106 OLED显示屏:从零开始的嵌入式显示解决方案

掌握SH1106 OLED显示屏:从零开始的嵌入式显示解决方案 【免费下载链接】Adafruit_SH1106 Adafruit graphic library for SH1106 dirver lcds. 项目地址: https://gitcode.com/gh_mirrors/ad/Adafruit_SH1106 SH1106 OLED显示屏是一款专为嵌入式系统设计的单色…

作者头像 李华