Java 设计模式心法之第30篇 - 返璞归真:设计模式与 SOLID 原则的深度融合
经历了 GoF 经典模式的系统学习、现代企业级模式的拓展视野,以及对模式误用与反模式的警示反思之后,我们是时候进行一次“返璞归真”的深度融合了。设计模式并非空中楼阁,它们是面向对象设计原则在特定场景下的具体实践和体现。本文将重新聚焦于设计的“内功心法”——SOLID 原则,并深入探讨它们是如何成为理解、评判和指导设计模式应用的“试金石”。我们将通过实例分析,揭示各种设计模式(从单例到访问者,从工厂到策略)是如何巧妙地运用或体现 SRP、OCP、LSP、ISP、DIP 这些核心原则的。最终目标是帮助您超越对模式本身的记忆,将原则内化于心,即使在没有现成模式可套用的情况下,也能基于原则做出优雅、健壮的设计决策,达到“手中无模式,心中有原则”的境界。
一、引子:万变不离其宗,原则是模式的灵魂
在设计模式的学习旅程中,我们掌握了各种精妙的“招式”——单例如何保证唯一,工厂如何封装创建,策略如何替换算法,状态如何驱动行为…… 但仅仅记住这些招式的“形”,而不理解其背后的“意”,就如同习武只练套路不修内功,难以达到上乘境界。
设计模式之所以能够解决特定的问题、带来诸如解耦、扩展性、可维护性等好处,根本原因在于它们遵循了(或者说帮助我们遵循了)一些更基本、更普适的面向对象设计原则。而 SOLID 原则正是其中最核心、最广为人知的一组。
回顾 SOLID:
- S - 单一职责原则 (SRP): 一个类只做好一件事。
- O - 开闭原则 (OCP): 对扩展开放,对修改关闭。
- L - 里氏替换原则 (LSP): 子类必须能够替换父类。
- I - 接口隔离原则 (ISP): 使用小而专的接口,而非大而全的接口。
- D - 依赖倒置原则 (DIP): 依赖抽象,而非依赖具体实现。
为何说原则是模式的灵魂?
- 模式是原则的体现: 大多数设计模式都是为了实现一个或多个 SOLID 原则而设计的。理解原则有助于我们理解模式为何如此设计及其价值所在。
- 原则是评判的标准: 我们可以用 SOLID 原则来审视一个模式的应用是否恰当,或者评估一个自定义设计的优劣。一个好的设计通常都较好地遵循了这些原则。
- 原则是创新的源泉: 当没有现成的模式可以解决问题时,深刻理解 SOLID 原则可以指导我们创造出符合良好设计规范的解决方案。
本章,我们将深入探索设计模式与 SOLID 原则之间水乳交融的深度联系,看模式如何“借力”原则,原则又如何通过模式“落地”。
二、模式为“术”,原则为“道”:实例分析模式与原则的融合
让我们选取一些代表性的设计模式,剖析它们与 SOLID 原则的内在关联。