【最新】Java的几种设计模式详解及适用业务场景


✅ 1. 单例模式(Singleton)

  • 定义:确保类只有一个实例,并提供全局访问点。
  • 优点:节省资源、控制访问。
  • 场景:数据库连接池、日志管理器、配置中心。
  • 代码要点
    • 构造方法私有
    • 静态变量保存唯一实例
    • 公共静态方法 getInstance() 获取实例

✅ 2. 工厂模式(Factory)

  • 定义:将对象创建逻辑封装,客户端通过工厂获取对象。
  • 分类:简单工厂、工厂方法、抽象工厂。
  • 优点:解耦、扩展性强。
  • 场景:对象创建复杂、需解耦创建与使用。
  • 代码要点
    • 产品接口 + 具体产品类
    • 工厂类根据参数返回不同产品实例

✅ 3. 观察者模式(Observer)

  • 定义:一对多依赖关系,主题状态变化自动通知所有观察者。
  • 优点:松耦合、广播通信。
  • 场景:事件系统、消息推送、发布订阅模型。
  • 代码要点
    • Subject 管理观察者列表
    • Observer 接口定义更新方法
    • 状态变化时调用 notifyObservers()

✅ 4. 策略模式(Strategy)

  • 定义:封装一系列算法,使它们可互相替换。
  • 优点:避免 if-else、提高扩展性。
  • 场景:排序策略、支付方式、资源调度。
  • 代码要点
    • 策略接口定义算法行为
    • 上下文类持有策略对象
    • 运行时动态切换策略

✅ 5. 适配器模式(Adapter)

  • 定义:将一个接口转换为另一个接口,使不兼容类协同工作。
  • 优点:复用旧代码、符合开闭原则。
  • 场景:集成第三方库、接口不兼容。
  • 代码要点
    • 目标接口 + 被适配类
    • 适配器类实现目标接口并持有被适配对象

✅ 6. 装饰器模式(Decorator)

  • 定义:动态地为对象添加额外功能,不改变原结构。
  • 优点:比继承更灵活、支持组合扩展。
  • 场景:日志包装、缓存包装、权限控制。
  • 代码要点
    • 组件接口 + 具体组件
    • 装饰器抽象类持有组件对象
    • 具体装饰器扩展功能

✅ 7. 代理模式(Proxy)

  • 定义:为其他对象提供代理以控制访问。
  • 优点:延迟加载、权限控制、日志记录。
  • 场景:权限校验、远程调用、缓存代理。
  • 代码要点
    • 接口定义行为
    • 真实类实现接口
    • 代理类实现接口并控制对真实对象的访问

✅ 8. 外观模式(Facade)

  • 定义:为复杂子系统提供统一的高层接口。
  • 优点:简化客户端调用、降低耦合。
  • 场景:封装复杂API、整合多个服务调用。
  • 代码要点
    • 多个子系统类
    • 外观类封装子系统调用流程
    • 客户端只与外观类交互

✅ 9. 模板方法模式(Template Method)

  • 定义:定义算法骨架,将具体步骤延迟到子类实现。
  • 优点:复用流程、扩展灵活。
  • 场景:支付流程、GUI事件处理、产品组装线。
  • 代码要点
    • 抽象类定义模板方法(final)
    • 子类实现可变步骤
    • 钩子方法可选覆盖

🔍 总结速查表

模式名称 关键词 典型场景
单例 唯一实例 配置中心、日志器
工厂 对象创建解耦 创建复杂对象、依赖注入
观察者 一对多通知 消息推送、事件系统
策略 动态切换算法 排序、支付、调度
适配器 接口转换 第三方库集成
装饰器 动态增强功能 日志、缓存、权限包装
代理 控制访问 权限代理、延迟加载
外观 简化复杂接口 封装子系统、统一API入口
模板方法 流程复用 支付流程、GUI事件、组装线

相关推荐
wuyk55514 小时前
从零吃透 MQTT 通信|第 8 章 FreeRTOS 多任务架构下 MQTT 工程架构,任务拆分、队列解耦、临界区保护
c语言·开发语言·stm32·学习·架构
weixin1997010801615 小时前
[特殊字符]《跨境二手ERP对接Back Market:标准化API + 7~10工作日技术合规审核实录》(附Python源码)
开发语言·python·pandas
sunshine22 girl15 小时前
Java学习一 环境配置2 Idea的入门使用和maven配置,项目启动脚本配置
java·maven
尘客-追梦15 小时前
Day 01:插件化之前,先看清 ABI 这堵墙
开发语言·c++·qt
持敬chijing15 小时前
Python-数据类型-列表
开发语言·python·青少年编程
有点。15 小时前
*C++哈夫曼树与哈夫曼编码
java·c++·servlet
CRMEB系统商城16 小时前
CRMEB标准版系统(Java)v3.1正式发布
java·spring·微信小程序·php·教育电商
写后端的胖头鱼16 小时前
【高频面试题】Java 基础类型 + 包装类 + String 互相转换
java·开发语言
weixin_4604435616 小时前
企业考试系统从.NET迁移到Java+Linux:数据库迁移、接口兼容与灰度切换实践
java·煤矿培训考试系统·煤矿在线考试系统·煤矿安全培训·煤矿考试系统·一人一档
matlab代码17 小时前
基于matlab自助水果超市水果识别收费系统(GUI界面)【源码67期】
开发语言·matlab