设计模式 简单汇总

ops/2025/2/27 5:55:49/

设计模式是软件工程中广泛使用的一套解决方案,用于解决常见问题并提高代码的质量。它们分为创建型、结构型和行为型三类,共23种模式。以下是各类别及其常见模式的详细说明:

目录

  • 创建型模式
  • 结构型模式
  • 行为型模式

创建型模式

这些模式关注对象的创建机制,帮助控制实例化过程。

单例模式(Singleton):确保一个类只有一个实例,并提供全局访问点。
应用场景:数据库连接管理、缓存系统等,避免资源浪费和潜在冲突。

工厂方法模式(Factory Method):定义创建对象的接口,由子类决定具体实现。
应用场景:框架开发,需要延迟对象创建逻辑。

抽象工厂模式(Abstract Factory):提供一组用于创建相关或相互依赖对象的接口。
应用场景:处理多个对象家族的创建,如不同数据库的连接池。

生成器模式(Builder):将复杂对象的构建过程与其表示分离,便于不同的构造逻辑。
应用场景:解析配置文件并构建复杂对象。

原型模式(Prototype):通过复制现有对象来创建新实例,减少对象创建开销。
应用场景:对象池或需要频繁克隆的对象管理。

结构型模式

这些模式处理类和对象的组合方式,以实现更灵活的设计。

适配器模式(Adapter):将接口转换为兼容接口,使原本不兼容的类协同工作。
应用场景:遗留系统与新系统的集成,如USB转接成Lightning接口。

装饰器模式(Decorator):动态地添加职责,通过组合的方式扩展对象功能。
应用场景:日志记录、事务管理等需要动态增加功能的场景。

代理模式(Proxy):控制对对象的访问,常用于远程调用、内容过滤或延迟加载。
应用场景:网络资源访问时的代理服务器。

外观模式(Facade):提供简单接口访问复杂子系统,隐藏内部实现细节。
应用场景:API设计,简化调用者的使用流程。

组合模式(Composite):将对象组合成树结构,以管理复杂对象的组成部分。
应用场景:文件系统、部件管理等需要层次化结构的场景。

享元模式(Flyweight):通过共享减少内存使用,常用于缓存或池化资源。
应用场景:处理大量相同状态的对象,如数据库连接池。

桥接模式(Bridge):将接口与其实现分离,支持独立变化。
应用场景:处理不同平台的图形API时,抽象绘图操作与具体实现。

行为型模式

这些模式关注对象之间的通信和算法的协作方式。

责任链模式(Chain of Responsibility):将请求沿着处理者链条传递,直到被处理。
应用场景:错误处理中的多级处理器,每个级别检查并处理错误。

命令模式(Command):将操作封装成对象,便于执行、撤销和组合。
应用场景:宏命令由多个简单命令组成,如图形编辑器的undo功能。

迭代器模式(Iterator):提供遍历集合对象的方法,无需暴露内部结构。
应用场景:文件系统遍历、数据库记录集处理。

中介者模式(Mediator):协调多个组件之间的通信,减少直接依赖。
应用场景:UI框架中的事件处理,协调不同组件的交互。

观察者模式(Observer):定义对象间的一对多依赖关系,一个变化通知所有依赖者。
应用场景:发布-订阅系统、数据模型与视图绑定。

模板方法模式(Template Method):在父类中定义算法骨架,子类实现细节。
应用场景:框架开发,如MVC模式中的请求处理流程。

策略模式(Strategy):将算法或行为封装成接口,支持动态选择和替换。
应用场景:根据条件选择不同的计算方式,如不同计费策略。

状态模式(State):允许对象在内部状态改变时改变其行为。
应用场景:有限状态机实现,如游戏中的角色状态切换。

访问者模式(Visitor):在不修改元素的情况下增加操作,支持复杂类型处理。
应用场景:处理不同类型的数据结构,如XML节点的访问和操作。

总结
设计模式为常见问题提供了一套经过验证的解决方案,帮助开发者写出更高效、可维护和可扩展的代码。理解和应用这些模式需要实践和经验积累,但它们能够显著提升软件开发的质量和效率。


http://www.ppmy.cn/ops/161600.html

相关文章

【第九节】C++设计模式(结构型模式)-Composite(组合)模式

目录 一、问题提出 二、模式结构 三、代码实现 三、总结 一、问题提出 组合模式:构建树形结构的统一解决方案 在软件开发中,我们经常需要处理树状的递归结构(例如文件系统、组织架构等)。这类场景中,组合模式&…

WPS接入私有化DeepSeek大语言模型

文章目录 1.安装officeAI软件1.1登录官网下载officeAI 2.officeAI相关配置2.1启动WPS第三方COM功能2.2接入本地ollama服务2.3演示示例 1.安装officeAI软件 OfficeAI 助手是一项专为 Microsoft Office 和 WPS 用户打造的智能办公工具软件,旨在解决多种常见办公问题。…

Deep seek学习日记1

Deepseek最强大的就是它的深度思考,并且展现了它的思考过程。 五种可使用Deep seek的方式(应该不限于这五种,后续嵌入deepseek的应该更多,多了解一点因为官网容易崩~~): 1.deep seek官网 2.硅基流动silicon…

python的Tkinter小程序上传Excel并下载Text

实现一个图形化的Excel到文本文件转换工具,用户可以通过上传Excel文件并选择特定的列和行来生成一个文本文件。以下是详细的代码功能、使用的技术以及每一部分的详细注释: 1.功能概述 上传Excel文件:用户可以选择一个Excel文件进行上传。 选…

Linux相关概念和易错知识点(30)(线程互斥、线程同步)

目录 1.线程互斥 (1)临界资源和临界区 (2)互斥和原子性 ①互斥 ②原子性 (3)加锁和解锁(互斥锁)的原理 (4)pthread_mutex系列函数和变量 ①lock、unlo…

【自学笔记】Spring Boot框架技术基础知识点总览-持续更新

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 Spring Boot框架技术基础知识点总览一、Spring Boot简介1.1 什么是Spring Boot?1.2 Spring Boot的主要特性 二、Spring Boot快速入门2.1 搭建Spring Boo…

Ajax数据采集与分析详解

文章目录 1. 什么是 Ajax?2. Ajax 的工作原理3. Ajax 在网页中的应用场景4. 爬取 Ajax 数据的方法4.1 分析网络请求4.2 模拟 Ajax 请求4.3 使用 Selenium 模拟浏览器4.4 使用 Headless 浏览器 5. 处理动态参数6. 处理分页和滚动加载7. 处理反爬虫机制8. 数据存储9. …

Linux 第三次脚本作业

源码编译安装httpd 2.4,提供系统服务管理脚本并测试(建议两种方法实现) 一、第一种方法 1、把 httpd-2.4.63.tar.gz 这个安装包上传到你的试验机上 2、 安装编译工具 (俺之前已经装好了) 3、解压httpd包 4、解压后的httpd包的文…