第8篇:六大设计原则在工厂模式中的体现
摘要:工厂模式如何体现SOLID六大设计原则?本文逐一剖析,并用总结对比表帮你一眼看清三种工厂的差异与选型,完成工厂模式的全面学习。
本文是《Java 23 种设计模式:从踩坑到精通》工厂模式长文的扩充短文第8篇,帮助你碎片化掌握核心知识点。
你有没有想过,工厂模式为什么能如此优雅地解决对象创建问题?因为它深刻践行了SOLID六大设计原则。看懂这些原则,才算真正理解工厂模式。
| 设计原则 | 在工厂模式中的体现 |
|---|---|
| 单一职责原则(SRP) | 每个具体工厂只负责创建一种产品,职责内聚 |
| 开闭原则(OCP) | 工厂方法新增产品只需加新工厂类,无需修改现有代码 |
| 里氏替换原则(LSP) | 客户端使用抽象产品类型,具体产品可任意替换 |
| 依赖倒置原则(DIP) | 客户端依赖抽象工厂和抽象产品接口,而非具体实现类 |
| **接口隔离原则(ISP)** | 抽象工厂按产品族维度拆分接口,避免"胖接口" |
| 迪米特法则(LoD) | 客户端只需知道工厂和产品接口,无需了解内部创建细节 |
举个具体的例子 :在工厂方法模式中,客户端代码只依赖 SenderFactory接口和 Sender接口,这就是依赖倒置 。新增 WechatSender时,只需新增 WechatSenderFactory,无需改动任何现有代码,这就是开闭原则 。每个工厂只干一件事,这就是单一职责。
你的场景该不该深究设计原则?
| 判断标准 | 是 → 深入理解 | 否 → 先用好模式 |
|---|---|---|
| 想写出高维护性的代码 | ✅ | ❌ |
| 准备架构师级别的面试 | ✅ | ❌ |
| 目前只求快速完成任务 | ❌ | 先会用模式 |
总结对比一览
| 对比维度 | 简单工厂 | 工厂方法 | 抽象工厂 |
|---|---|---|---|
| GoF收录 | 否 | 是 | 是 |
| 工厂数量 | 1个 | N个(每产品一工厂) | N个(每产品族一工厂) |
| 产品数量 | 多种 | 一种(每工厂) | 一族(多产品) |
| 开闭原则 | 违反 | 符合 | 部分符合 |
| 类复杂度 | ★☆☆☆ | ★★★☆ | ★★★★ |
| 推荐指数 | ★★★☆ | ★★★★★ | ★★★★ |
| 典型应用 | Calendar.getInstance() |
Spring FactoryBean |
MyBatis SqlSessionFactory |
建议:日常开发中,优先考虑简单工厂(够用即止);产品种类多且频繁扩展时升级为工厂方法;系统存在产品族概念时(如多端UI、多数据库)果断使用抽象工厂。
📖 完整长文入口:本文是工厂模式扩充系列的最后一篇。如果你想一次性阅读完整内容(含UML、三种工厂对比、框架源码、面试追问等),请查看原长文:
👉 《Java 23 种设计模式:从踩坑到精通 | 工厂模式》
🔗 系列导航:
- 上一篇:第7篇:工厂模式面试高频题与避坑指南
- 下一篇:无(本篇为末篇)
- 返回 : 《工厂模式·扩充系列》目录
- 返回 :《Java 23种设计模式:从踩坑到精通》总目录