java设计模式其实很简单!11种模式对比学习,新手也能看懂

🎯 为什么需要这个项目?

痛点:很多设计模式教程过于理论化,看完还是不知道什么时候该用哪个模式。

本项目通过简洁的代码贴近生活的场景,帮你快速理解不同设计模式的核心区别适用场景


📚 项目特点

代码极简 - 每个模式3-5个类,聚焦核心逻辑
场景直观 - 电商、支付、咖啡等日常场景,一看就懂
对比清晰 - 相似模式放在一起,差异一目了然
测试完整 - 24个单元测试,运行即验证


🔍 11种设计模式速览

一、创建型模式 - “如何优雅地创建对象”

1️⃣ 单例模式 vs 工厂模式
模式 一句话理解 应用场景 示例
单例 全局只要一个实例 订单管理器、配置中心 OrderManager.getInstance()
工厂 根据条件创建不同类型 支付宝/微信支付选择 PaymentFactory.create("alipay")

核心区别

  • 单例:控制数量(只有一个)
  • 工厂:控制类型(创建哪一种)

2️⃣ 抽象工厂 vs 建造者
模式 一句话理解 应用场景 示例
抽象工厂 创建一系列相关产品 Windows/Mac整套UI组件 WindowsFactory.createButton() + createMenu()
建造者 分步骤构建复杂对象 电脑选配CPU/内存/硬盘 new Builder().cpu("i7").ram("16G").build()

核心区别

  • 抽象工厂:产品族(一套相关的)
  • 建造者:组装过程(一步步搭建)

3️⃣ 原型模式
模式 一句话理解 应用场景 示例
原型 复制现有对象 文档模板克隆 doc.clone()

何时使用:创建相似对象时,克隆比new更高效


二、结构型模式 - “如何组合类和对象”

4️⃣ 适配器模式 vs 装饰器模式

这是最容易混淆的两个模式!

模式 一句话理解 目的 示例
适配器 转换接口,让不兼容的能一起工作 兼容性 旧版支付系统 → 新版接口
装饰器 动态添加功能,不修改原类 扩展性 咖啡 + 牛奶 + 糖

形象比喻

  • 适配器 = 电源转接头(美标→国标)
  • 装饰器 = 手机壳(可以叠加多层)

代码对比

// 适配器:改变接口
ModernPayment adapter = new PaymentAdapter(new LegacyPayment());
adapter.payNewWay(); // 调用新接口,内部调用旧方法

// 装饰器:增强功能
Coffee coffee = new MilkDecorator(new SugarDecorator(new SimpleCoffee()));
coffee.cost(); // 价格 = 咖啡 + 糖 + 牛奶

三、行为型模式 - “对象之间如何通信”

5️⃣ 观察者模式 vs 策略模式
模式 一句话理解 核心思想 示例
观察者 一对多通知,状态变化自动推送 发布-订阅 库存变化 → 通知所有关注用户
策略 算法可替换,运行时切换 封装变化 普通会员9折 / VIP会员8折

核心区别

  • 观察者:被动接收通知
  • 策略:主动选择算法

6️⃣ 命令模式 vs 模板方法模式
模式 一句话理解 核心思想 示例
命令 请求封装成对象,支持撤销 解耦调用者和执行者 遥控器按钮 → 开灯/关灯
模板方法 固定流程,细节由子类实现 复用算法骨架 数据处理:读取→解析→保存

形象比喻

  • 命令 = 菜单点餐(服务员记录订单,厨师执行)
  • 模板方法 = 做菜流程(洗菜→切菜→炒菜,具体食材不同)

📊 模式选择决策图

遇到以下场景时,考虑使用对应模式:

需要创建对象?
├─ 只想要一个实例 → 单例模式
├─ 根据条件选类型 → 工厂模式
├─ 创建产品族     → 抽象工厂
├─ 分步构建       → 建造者
└─ 快速复制       → 原型模式

需要组合功能?
├─ 接口不兼容     → 适配器模式
└─ 动态加功能     → 装饰器模式

需要对象通信?
├─ 状态变化通知   → 观察者模式
├─ 算法可切换     → 策略模式
├─ 请求队列化     → 命令模式
└─ 流程标准化     → 模板方法模式

🚀 快速开始

# 克隆项目
git clone https://gitee.com/jiucenglou/java-design-patterns-learning.git

# 运行测试,看效果
cd java-design-patterns-learning
mvn test

你会看到:

✅ Tests run: 24, Failures: 0, Errors: 0

💡 学习建议

最佳学习路径:

  1. 先看测试代码(5分钟)- 了解模式怎么用
  2. 再看核心类(10分钟)- 理解UML结构
  3. 动手改代码(15分钟)- 添加新实现或调整逻辑
  4. 对比总结(5分钟)- 思考与相似模式的区别

重点对比组:

🔥 必掌握对比

  • 适配器 vs 装饰器(结构型双子星)
  • 观察者 vs 策略(行为型易混对)
  • 工厂 vs 抽象工厂(创建型进阶)

🔗 获取项目

🌟 Gitee地址: https://gitee.com/jiucenglou/java-design-patterns-learning

欢迎 Star ⭐,你的支持是我更新更多模式的动力!


📝 后续计划

持续补充剩余12种模式,保持简洁易懂的风格:

  • 代理模式、责任链模式、状态模式
  • 访问者模式、中介者模式、迭代器模式等

💬 互动交流

你觉得哪两个模式最容易混淆? 欢迎在评论区讨论!

如果文章帮到你,别忘了点赞收藏~


标签: #Java #设计模式 #实战入门 #代码简洁 #对比学习 #开源项目

更多推荐