高 基础
设计模式六大原则#
一句话答案#
SOLID + 迪米特:单一职责、开闭原则(对扩展开放/修改关闭)、里氏替换、接口隔离、依赖倒转、最少知道。
核心要点
| 原则 | 要点 |
|---|---|
| 单一职责 | 一个类只做一件事 |
| 开闭原则 | 对扩展开放,对修改关闭 |
| 里氏替换 | 子类能替代父类 |
| 接口隔离 | 接口细粒度,不强制依赖不需要的 |
| 依赖倒转 | 依赖抽象不依赖具体 |
| 迪米特 | 只与直接朋友通信 |
面试回答(2分钟版)
设计模式六大原则可以用SOLID加迪米特来记忆。单一职责原则是一个类只负责一件事,职责越单一越容易维护和测试。开闭原则是对扩展开放对修改关闭,加新功能应该通过新增代码而不是改老代码,策略模式就是开闭原则的典型落地。里氏替换原则要求子类能够替代父类出现在任何地方而不改变程序行为,违反它说明继承关系设计有问题。接口隔离原则是接口要细粒度,不要强迫实现类依赖它不需要的方法。依赖倒转原则是高层模块不应依赖低层模块的具体实现而应依赖抽象,Spring的IoC容器就是依赖倒转的最佳实践,Service依赖的是接口而非具体实现。迪米特法则也叫最少知道原则,一个对象只与直接朋友通信,减少类之间的耦合。这六个原则不是死规矩,实际开发中要根据场景权衡,过度设计反而增加复杂度。
追问与易错
追问方向:
- “开闭原则怎么落地?”→ 通过策略模式/模板方法/工厂模式等设计模式实现:新增功能只需新增实现类(扩展),不修改已有代码(关闭);Spring 的 @Conditional 自动配置也是开闭原则的体现
- “依赖倒转在 Spring 中怎么体现?”→ Service 层依赖的是 Repository 接口而非具体实现类,Spring IoC 容器在运行时注入具体实现,高层模块不依赖低层模块的细节,两者都依赖抽象
- “六大原则关系?”→ 开闭原则是总纲(目标),其余五个是实现手段:单一职责降低变化原因、里氏替换保证继承正确性、接口隔离避免臃肿接口、依赖倒转面向抽象编程、迪米特减少耦合
易错点:
- ❌ 必须全部遵守——是指导原则适度即可
- ❌ 只记名不知怎么用——面试要结合代码举例