设计模式开篇:设计模式的七大核心原则
设计模式的原则是面向对象设计中总结出的指导性准则,它们帮助开发者创建灵活、可维护、可复用的代码。以下是设计模式的 七大核心原则:
1. 单一职责原则 (SRP, Single Responsibility Principle)
定义:一个类应该只有一个引起变化的原因(即只负责一项职责)。
核心思想:高内聚、低耦合。
例子:将用户管理拆分为
UserDAO
(数据库操作)和UserService
(业务逻辑)。
2. 开闭原则 (OCP, Open-Closed Principle)
定义:软件实体(类、模块、函数)应对扩展开放,对修改关闭。
核心思想:通过抽象(接口/抽象类)和组合扩展功能,而非直接修改代码。
例子:使用策略模式实现不同的支付方式,新增支付方式时无需修改原有代码。
3. 里氏替换原则 (LSP, Liskov Substitution Principle)
定义:子类必须能够替换父类,且不影响程序的正确性。
核心思想:继承应确保父类行为的逻辑一致性。
例子:
正方形
不应继承长方形
(因为修改边长行为不一致),而应共同实现图形
接口。
4. 接口隔离原则 (ISP, Interface Segregation Principle)
定义:客户端不应被迫依赖它不需要的接口。应将大接口拆分为更小、更具体的接口。
核心思想:避免“胖接口”,减少不必要的耦合。
例子:将
Animal
接口拆分为Flyable
、Swimmable
等,避免鸟类被迫实现游泳方法。
5. 依赖倒置原则 (DIP, Dependency Inversion Principle)
定义:
高层模块不应依赖低层模块,二者都应依赖抽象。
抽象不应依赖细节,细节应依赖抽象。
核心思想:通过依赖注入(DI)或接口解耦。
例子:
Service
层依赖Repository
接口,而非具体的MySQLRepository
。
6. 迪米特法则 (LoD, Law of Demeter) / 最少知识原则
定义:一个对象应尽可能少地与其他对象交互(只与直接朋友通信)。
核心思想:降低类之间的耦合,避免链式调用(如
a.getB().getC().doSomething()
)。例子:通过封装方法,直接提供
a.doSomething()
,内部处理对B
和C
的调用。
7. 合成复用原则 (CRP, Composite Reuse Principle)
定义:优先使用组合(has-a)而非继承(is-a)来复用代码。
核心思想:继承会导致强耦合,组合更灵活。
例子:用
List<T>
组合实现集合功能,而非继承ArrayList
。
其他重要原则
KISS原则(Keep It Simple, Stupid):保持代码简单直接。
YAGNI原则(You Aren’t Gonna Need It):不要过度设计,仅实现当前需要的功能。
DRY原则(Don’t Repeat Yourself):避免重复代码,通过抽象提取公共逻辑。
总结
原则 | 关键目标 | 实现手段 |
---|---|---|
单一职责原则 (SRP) | 高内聚 | 拆分职责 |
开闭原则 (OCP) | 可扩展性 | 抽象与多态 |
里氏替换原则 (LSP) | 继承安全性 | 子类行为一致性 |
接口隔离原则 (ISP) | 接口最小化 | 拆分接口 |
依赖倒置原则 (DIP) | 解耦 | 依赖抽象 |
迪米特法则 (LoD) | 降低耦合 | 减少交互 |
合成复用原则 (CRP) | 灵活复用 | 优先组合 |
这些原则是设计模式的基础,实际应用中需根据场景权衡,而非机械遵循。