Java设计模式拓展

Java 中的设计模式分为三大类:创建型模式结构型模式行为型模式,共计 23 种。以下是核心设计模式的详细介绍:

一、创建型模式(5 种)

1. 单例模式(Singleton)
  • 意图:确保一个类只有一个实例,并提供全局访问点。
  • 应用场景
    • 配置管理器(如 Spring 的 ApplicationContext)
    • 数据库连接池
    • 日志记录器
  • 实现思路
    • 私有化构造函数
    • 静态实例变量
    • 线程安全的获取方法(如双重检查锁定)
2. 工厂模式(Factory)
  • 意图:定义创建对象的接口,让子类决定实例化哪个类。
  • 应用场景
    • 对象创建逻辑复杂时(如参数校验、依赖初始化)
    • 根据条件动态创建对象(如支付方式工厂)
  • 实现思路
    • 抽象工厂类 / 接口
    • 具体工厂类实现创建逻辑
3. 抽象工厂模式(Abstract Factory)
  • 意图:提供一个创建一系列相关对象的接口,无需指定具体类。
  • 应用场景
    • 系统需要独立于产品的创建、组合和表示(如 UI 组件工厂)
    • 多版本产品族(如不同操作系统的 GUI 元素)
  • 实现思路
    • 抽象工厂定义多个产品创建方法
    • 具体工厂实现多个产品族的创建
4. 建造者模式(Builder)
  • 意图:将复杂对象的构建与其表示分离,使同样的构建过程可以创建不同的表示。
  • 应用场景
    • 对象参数众多且组合复杂(如 SQL 查询构建器)
    • 分步构建对象(如游戏角色创建)
  • 实现思路
    • 导演类(Director)控制构建流程
    • 具体建造者实现部件构建
5. 原型模式(Prototype)
  • 意图:通过复制现有实例来创建新实例,无需知道创建细节。
  • 应用场景
    • 对象创建成本高(如初始化耗时、资源密集)
    • 动态生成对象(如游戏中的角色克隆)
  • 实现思路
    • 实现 Cloneable 接口并重写 clone () 方法
    • 深拷贝与浅拷贝的选择

二、结构型模式(7 种)

6. 代理模式(Proxy)
  • 意图:为其他对象提供一种代理以控制对这个对象的访问。
  • 应用场景
    • 远程代理(如 RMI)
    • 虚拟代理(延迟加载大对象)
    • 保护代理(权限控制)
  • 实现思路
    • 代理类与目标类实现相同接口
    • 代理类持有目标类引用并增强功能
7. 适配器模式(Adapter)
  • 意图:将一个类的接口转换成客户希望的另一个接口。
  • 应用场景
    • 旧系统接口适配新需求(如 LegacyRectangle→Shape 接口)
    • 第三方库接口适配(如不同支付网关的统一接口)
  • 实现思路
    • 类适配器(继承适配)
    • 对象适配器(组合适配)
8. 装饰器模式(Decorator)
  • 意图:动态地给一个对象添加额外职责,比继承更灵活。
  • 应用场景
    • 功能动态增强(如 Java IO 流的包装)
    • 权限控制叠加(如用户角色装饰)
  • 实现思路
    • 抽象组件接口
    • 具体组件类
    • 装饰器基类实现组件接口并持有组件引用
9. 外观模式(Facade)
  • 意图:为子系统中的一组接口提供统一的高层接口,简化调用。
  • 应用场景
    • 复杂系统的简化入口(如电商下单流程整合)
    • 第三方库封装(如 Apache Commons 的 IOUtils)
  • 实现思路
    • 外观类封装多个子系统的交互逻辑
10. 桥接模式(Bridge)
  • 意图:将抽象部分与实现部分分离,使它们可以独立变化。
  • 应用场景
    • 多维变化的系统(如不同数据库 + 不同日志实现)
    • 避免继承导致的类爆炸
  • 实现思路
    • 抽象化角色持有实现化角色引用
    • 实现化角色定义具体行为
11. 组合模式(Composite)
  • 意图:将对象组合成树形结构以表示 “部分 - 整体” 的层次结构。
  • 应用场景
    • 文件系统、菜单系统、组织架构
    • 统一处理叶子节点和组合节点
  • 实现思路
    • 抽象组件定义公共接口
    • 叶子节点和组合节点实现该接口
12. 享元模式(Flyweight)
  • 意图:运用共享技术有效地支持大量细粒度的对象。
  • 应用场景
    • 缓存大量相似对象(如文本编辑器中的字符)
    • 游戏中的粒子系统
  • 实现思路
    • 享元工厂管理共享对象池
    • 内部状态(共享)与外部状态(不共享)分离

三、行为型模式(11 种)

13. 观察者模式(Observer)
  • 意图:定义对象间的一对多依赖,当一个对象状态改变时,所有依赖者都会收到通知。
  • 应用场景
    • 事件驱动系统(如 GUI 事件处理)
    • 发布 - 订阅系统(如消息队列)
  • 实现思路
    • 主题接口(Subject)定义注册 / 注销 / 通知方法
    • 观察者接口(Observer)定义更新方法
14. 策略模式(Strategy)
  • 意图:定义一系列算法,将每个算法封装起来,并使它们可以相互替换。
  • 应用场景
    • 多种算法选择(如排序算法、支付方式)
    • 避免大量 if-else 或 switch 语句
  • 实现思路
    • 策略接口定义算法行为
    • 具体策略类实现不同算法
    • 上下文类持有策略引用
15. 状态模式(State)
  • 意图:允许对象在内部状态改变时改变它的行为,看起来好像修改了它的类。
  • 应用场景
    • 工作流状态转换(如订单状态)
    • 游戏角色状态管理
  • 实现思路
    • 状态接口定义状态行为
    • 具体状态类实现行为
    • 上下文类维护当前状态
16. 责任链模式(Chain of Responsibility)
  • 意图:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。
  • 应用场景
    • 多级审批流程
    • 过滤器链(如 Servlet Filter)
  • 实现思路
    • 处理者接口定义处理方法和设置下一个处理者的方法
    • 具体处理者实现处理逻辑并传递请求
17. 命令模式(Command)
  • 意图:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化。
  • 应用场景
    • 撤销 / 重做操作(如文本编辑器)
    • 任务队列(如线程池)
  • 实现思路
    • 命令接口定义执行方法
    • 具体命令类封装接收者和动作
    • 调用者持有命令对象
18. 模板方法模式(Template Method)
  • 意图:定义一个操作中的算法骨架,将一些步骤延迟到子类中。
  • 应用场景
    • 流程固定但步骤实现可变(如 JUnit 测试框架)
    • 框架开发(如 Spring MVC 的 HandlerAdapter)
  • 实现思路
    • 抽象类定义模板方法和基本操作
    • 具体子类实现可变步骤
19. 访问者模式(Visitor)
  • 意图:表示一个作用于某对象结构中的各元素的操作,使你可以在不改变各元素类的前提下定义作用于这些元素的新操作。
  • 应用场景
    • 复杂对象结构的操作扩展(如 XML 解析器)
    • 报表生成器
  • 实现思路
    • 访问者接口定义对每个元素的访问方法
    • 元素接口接受访问者
    • 具体元素类实现接受逻辑
20. 中介者模式(Mediator)
  • 意图:用一个中介对象来封装一系列的对象交互,使各对象不需要显式地相互引用。
  • 应用场景
    • 聊天室、MVC 中的 Controller
    • 系统模块间复杂交互
  • 实现思路
    • 中介者接口定义协调方法
    • 具体中介者管理同事对象并实现协调逻辑
21. 迭代器模式(Iterator)
  • 意图:提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。
  • 应用场景
    • 集合遍历(如 Java 的 Iterator)
    • 自定义数据结构遍历
  • 实现思路
    • 迭代器接口定义遍历方法
    • 具体迭代器实现遍历逻辑
    • 聚合接口定义创建迭代器的方法
22. 解释器模式(Interpreter)
  • 意图:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。
  • 应用场景
    • 简单语法解析(如 SQL WHERE 子句)
    • 正则表达式引擎
  • 实现思路
    • 抽象表达式定义解释方法
    • 终结符表达式和非终结符表达式实现解释逻辑
23. 备忘录模式(Memento)
  • 意图:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。
  • 应用场景
    • 撤销操作(如文本编辑器的历史记录)
    • 游戏存档
  • 实现思路
    • 备忘录类存储原发器状态
    • 原发器创建和恢复备忘录
    • 管理者保存和提供备忘录

总结

设计模式的核心价值在于:

  1. 解耦:降低模块间的依赖
  2. 复用:提高代码可复用性
  3. 扩展:支持系统灵活扩展
  4. 维护:使代码结构清晰,易于维护
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值