第7篇:六大设计原则在模板方法中的体现
摘要:模板方法模式如何体现单一职责、开闭原则、里氏替换等六大设计原则?本文用一张对照表和逐条解读,帮你建立模式与原则之间的深层联系,不仅会用,还能讲出设计背后的道理。
🔗系列导航:
- 上一篇:实战案例:电子面单编排器
- 下一篇:模板方法模式的优缺点与面试高频考点
- 原系列总目录🔥 订阅本专栏,不错过每一篇
本文是《Java 23 种设计模式:从踩坑到精通》模板方法模式长文的扩充短文第7篇,帮助你碎片化掌握核心知识点。
学完模板方法模式的核心知识后,我们来做一个更高维度的总结:它如何体现了面向对象设计的六大原则?这不仅是面试加分项,更能帮你理解为什么模板方法模式能在框架中被广泛使用。
六大原则逐一对照
| 设计原则 | 在模板方法模式中的体现 |
|---|---|
| 单一职责原则(SRP) | 抽象父类负责管理算法骨架,子类负责实现具体步骤,各司其职 |
| 开闭原则(OCP) | 新增不同实现只需新增子类,无需修改抽象父类,对扩展开放、对修改关闭 |
| 里氏替换原则(LSP) | 所有子类都可替换父类出现的位置,客户端面向抽象父类编程 |
| 依赖倒置原则(DIP) | 父类依赖抽象方法(接口),子类实现具体逻辑,高层模块不依赖低层模块 |
| 接口隔离原则(ISP) | 抽象父类只定义必要的抽象方法和钩子,不提供臃肿的方法集 |
| 迪米特法则(LoD) | 客户端只与抽象父类交互,不需要了解子类的具体实现细节 |
逐条解读
单一职责原则
父类只做一件事:定义流程骨架。子类也只做一件事:实现自己的细节。改动子类不会影响父类,改动父类也不会影响子类(只要不改变抽象方法签名)。
开闭原则
想增加一种新的饮品?新建一个子类,实现brew()和addCondiments()即可。父类BeverageMaker一行代码都不用改。这就是“对扩展开放,对修改关闭”。
里氏替换原则
客户端代码BeverageMaker maker = new TeaMaker();可以随时换成new CoffeeMaker(),程序依然正确运行。子类可以无缝替换父类。
依赖倒置原则
父类BeverageMaker依赖的是抽象的brew()和addCondiments()方法,而不是具体的茶或咖啡实现。子类反过来实现这些抽象方法。这就是“依赖抽象,不依赖具体”。
接口隔离原则
模板方法模式中的抽象类只暴露了必要的抽象方法(必须实现)和钩子方法(可选实现),没有强迫子类实现它们不需要的方法。
迪米特法则
客户端只调用maker.makeBeverage(),根本不知道内部有boilWater()、pourInCup()这些私有方法,也不需要知道子类是怎么实现brew()的。耦合度降到最低。
一句话总结:模板方法模式天然符合 SOLID,是继承复用的典范。
📖完整长文入口:本文是模板方法模式扩充系列的第7篇。如果你想一次性阅读完整内容(含UML、完整代码、框架应用、面试追问等),请查看原长文:
👉 《Java 23 种设计模式:从踩坑到精通 | 模板方法模式》
🔗系列导航:
- 上一篇:实战案例:电子面单编排器
- 下一篇:模板方法模式的优缺点与面试高频考点
- 返回扩充系列目录 🔥 订阅本专栏,不错过每一篇
- 原系列总目录🔥 订阅本专栏,不错过每一篇
📖实战配套:本文的电子面单编排器设计,在《电商多平台电子面单对接实战》系列中有完整落地代码:
- 多平台统一架构设计
- 模板方法的组合与继承抉择