当前位置: 首页 > news >正文

91、23种经典设计模式

设计模式是软件设计中反复出现的解决方案的模板,用于解决特定问题并提高代码的可维护性、可扩展性和可复用性。23种经典设计模式可分为创建型、结构型和行为型三大类,以下是具体分类及模式概述:

一、创建型模式(5种)

关注对象的创建过程,解耦对象的实例化与使用,提高灵活性。

1.单例模式

  • 定义:确保一个类只有一个实例,并提供全局访问点。
  • 应用场景:配置管理、线程池、数据库连接池等。
  • 实现方式:饿汉式、懒汉式、双重检查锁、静态内部类等。

2.抽象工厂模式

  • 定义:创建一系列相关或依赖对象的家族,无需指定具体类。
  • 应用场景:跨平台UI组件库、数据库访问层等。
  • 优点:隔离具体类的生成,客户端与具体产品解耦。

3.工厂方法模式

  • 定义:定义一个创建对象的接口,由子类决定实例化哪个类。
  • 应用场景:JDBC连接数据库、日志记录器等。
  • 优点:符合开闭原则,新增产品无需修改原有代码。

4.建造者模式

  • 定义:分步骤构建复杂对象,允许相同的构建过程创建不同表示。
  • 应用场景:SQL构建器、JSON解析器等。
  • 优点:封装构建逻辑,便于扩展和复用。

5.原型模式

  • 定义:通过复制现有对象创建新对象,避免重复初始化。
  • 应用场景:对象创建成本高(如数据库连接)、缓存系统等。
  • 实现方式:浅拷贝(Object.clone())或深拷贝(序列化/反序列化)。

二、结构型模式(7种)

关注类或对象的组合,形成更大的结构,提高灵活性和可扩展性。

1.桥接模式

  • 定义:将抽象部分与实现部分分离,使它们可以独立变化。
  • 应用场景:跨平台图表库、驱动框架等。
  • 优点:避免继承导致的类爆炸,提高扩展性。

2.代理模式

  • 定义:为其他对象提供代理以控制访问。
  • 应用场景:RPC调用、AOP编程等。
  • 类型:静态代理、动态代理(JDK/CGLIB)。

3.组合模式

  • 定义:将对象组合成树形结构,表示“部分-整体”层次。
  • 应用场景:文件系统、GUI组件树等。
  • 优点:统一处理单个对象和组合对象。

4.适配器模式

  • 定义:将不兼容的接口转换为客户端期望的接口。
  • 应用场景:旧系统改造、第三方库集成等。
  • 类型:类适配器(继承)、对象适配器(组合)。

5.享元模式

  • 定义:共享大量细粒度对象,减少内存占用。
  • 应用场景:字符串常量池、线程池等。
  • 核心:区分内部状态(共享)和外部状态(独立)。

6.装饰器模式

  • 定义:动态添加职责到对象,比继承更灵活。
  • 应用场景:Java I/O流、日志装饰器等。
  • 优点:避免子类膨胀,功能扩展开放。

7.外观模式

  • 定义:为复杂子系统提供简化接口。
  • 应用场景:分布式系统、家庭影院控制等。
  • 优点:降低客户端与子系统的耦合度。

三、行为型模式(11种)

关注对象间的通信和职责分配,提高灵活性和可维护性。

1.访问者模式

  • 定义:将操作作用于对象结构中的元素,支持新操作扩展。
  • 应用场景:编译器语法树分析、XML解析等。
  • 缺点:增加对象结构时需修改所有访问者。

2.策略模式

  • 定义:定义算法族,封装并使其可互换。
  • 应用场景:排序算法、支付方式选择等。
  • 优点:避免条件语句,便于扩展新算法。

3.备忘录模式

  • 定义:捕获并保存对象状态,以便后续恢复。
  • 应用场景:游戏存档、文本编辑器撤销操作等。
  • 核心:备忘录对象(存储状态)、原发器(被保存对象)、管理者(管理备忘录)。

4.观察者模式

  • 定义:定义一对多依赖,主题状态变化时通知观察者。
  • 应用场景:事件处理、消息订阅等。
  • 实现方式:Java中的Observer接口或自定义事件总线。

5.模板方法模式

  • 定义:定义算法骨架,将步骤延迟到子类实现。
  • 应用场景:框架设计、单元测试框架等。
  • 核心:抽象类定义模板方法,子类实现具体步骤。

6.迭代器模式

  • 定义:提供顺序访问聚合对象元素的方法,不暴露内部结构。
  • 应用场景:集合遍历、树形结构遍历等。
  • 优点:统一访问接口,支持不同遍历方式。

7.状态模式

  • 定义:允许对象在内部状态改变时改变行为。
  • 应用场景:订单状态机、游戏角色状态等。
  • 优点:避免大量条件语句,符合开闭原则。

8.命令模式

  • 定义:将请求封装为对象,支持参数化、队列和日志。
  • 应用场景:事务管理、撤销操作等。
  • 优点:将操作与接收者解耦。

9.中介者模式

  • 定义:用中介对象封装对象间交互,减少耦合。
  • 应用场景:聊天室、GUI组件交互等。
  • 优点:避免对象间直接引用,降低复杂度。

10.解释器模式

  • 定义:定义语言的文法表示,并解释执行。
  • 应用场景:SQL解析、正则表达式等。
  • 缺点:复杂语言解析效率低。

11.责任链模式

  • 定义:将请求沿处理链传递,直到有对象处理它。
  • 应用场景:Web请求处理、审批流程等。
  • 优点:解耦请求发送者和接收者。

速记口诀

  • 单抽工建原。
  • 桥代理组装适配器,享元回家装饰外观。
  • 访问者写好策略备忘录,观察模板迭代的状态,命令中介解释责任链。

在这里插入图片描述

http://www.xdnf.cn/news/1287883.html

相关文章:

  • AI大模型基础:BERT、GPT、Vision Transformer(ViT)的原理、实现与应用
  • 农业智慧大屏系统 - Flask + Vue实现
  • 飞算AI:企业智能化转型的新引擎
  • 嵌入式硬件——ARM
  • 【虚拟机】VMwareWorkstation17Pro安装步骤
  • 三维工厂设计软件 AutoCAD Plant 3D 安装图文教程
  • Nginx 启用 HTTPS:阿里云免费 SSL 证书详细图文教程(新手0.5小时可完成)
  • C# 基于halcon的视觉工作流-章29-边缘提取-亚像素
  • AI Agent——基于 LangGraph 的多智能体任务路由与执行系统实战
  • 蓝桥杯电子赛----嵌入式赛道备赛LED
  • lesson36:MySQL从入门到精通:全面掌握数据库操作与核心原理
  • Python初学者笔记第二十四期 -- (面向对象编程)
  • 计算机网络1-7:第一章 概述 章节小结
  • 用 Apache Iceberg 与 Apache Spark 在 Google Cloud 打造高性能、可扩展的数据湖仓
  • 【Java Web 快速入门】九、事务管理
  • 【论文阅读】RestorerID: Towards Tuning-Free Face Restoration with ID Preservation
  • 【游戏优化笔记】开发中如何减少建筑和树木等环境元素的资源消耗?
  • 【跨服务器的数据自动化下载--安装公钥,免密下载】
  • 【CSS3】录音中。。。
  • 【oracle闪回查询】记录字段短时间被修改的记录
  • 【AI绘画】Stable Diffusion webUI 常用功能使用技巧
  • css之再谈浮动定位float(深入理解篇)
  • react+vite来优化下每次使用hook函数都要引入的情况
  • React (react-amap)高德地图使用(加标记、缩放、缩略图)
  • 荣耀手机无法连接win11电脑,错误消息:“无法在此设备上加载驱动程序 (hn_usbccgpfilter.sys)。”解决方案
  • OBOO鸥柏丨智能会议平板教学查询一体机交互式触摸终端招标投标核心标底参数要求
  • SQL Server增加对UTF-8的支持
  • Baumer高防护相机如何通过YoloV8深度学习模型实现纸箱的实时检测计数(C#代码UI界面版)
  • 谷歌ADK接入文件操作MCP
  • 力扣47:全排列Ⅱ