当前位置: 首页 > 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.dtcms.com/a/327846.html

相关文章:

  • STM32即插即用HAL库驱动系列——4位串行数码管显示
  • Pandas数据处理与分析实战:Pandas数据处理与分析入门-选择与过滤
  • uniapp -- 小程序处理与设备通讯 GBK/GB2312 编码问题。
  • 记一次 .NET 某汽车控制焊接软件 卡死分析
  • 腾讯云terraform学习教程
  • 传输线的效应
  • 【MAUI】在 .NET MAUI 中实现全局异常捕获的完整指南
  • 五、Nginx、RabbitMQ和Redis在Linux中的安装和部署
  • DAY41 简单CNN
  • PostgreSQL——数据查询
  • PyCharm Community 2024.2.3.exe 安装教程(详细步骤,附安装包下载)
  • Docker守护进程安全加固在香港VPS环境的操作标准
  • vue3使用插槽写一个自定义瀑布列表
  • 海康视觉相机驱动软件参数配置
  • 用 Docker 安装并启动 MySQL:从零到实战的完整指南
  • vivo Pulsar 万亿级消息处理实践(2)-从0到1建设 Pulsar 指标监控链路
  • 人工智能与金融:金融行业的革新
  • 计算机网络摘星题库800题笔记 第3章 数据链路层
  • linux Phy驱动开发之mido总线介绍
  • 打印流水号标签
  • 三防手机和防爆手机的本质区别是什么?
  • INSAR数据处理---ENVI5.6(Sarscape)
  • 【从零开始java学习|第三篇】变量与数据类型的关联
  • 秋招笔记-8.9
  • 【网络运维】Linux和自动化: Ansible基础实践
  • SynAdapt:通过合成连续思维链实现大语言模型的自适应推理
  • 机器学习第十课之TF-IDF算法(红楼梦文本分析)
  • 服务器节点技术解析:从架构原理到家庭实践的全维度指南
  • 文件IO函数实现
  • 异或和查询