SOLID 原则
单一职责原则要求什么?
- 职责: 一个类只承担一个功能的职责;
- 判断: 若两个变化的理由总是一起出现, 才放在同一个类里;
开闭原则要求什么?
- 定义: 对扩展开放, 对修改关闭;
- 目标: 在不修改原有类的基础上添加新功能;
- 实现:
- 用接口约束类逻辑;
- 用依赖注入或委托把逻辑抽象到类外部;
interface InvoicePersistence {
save(invoice: Invoice): void;
}
class DatabasePersistence implements InvoicePersistence {
public save(invoice: Invoice) {
// 新增存储方式时只新增实现类, 不修改调用方
}
}
里氏替换原则要求什么?
- 定义: 若
B是A的子类, 则使用A的任何场景都可以替换成B; - 约束: 子类不能收窄父类承诺的行为与前置条件;
- 反例: 鸵鸟继承会飞的鸟后重写
fly()抛错, 见 组合优于继承;
接口隔离原则要求什么?
- 定义: 一个类对另一个类的依赖应建立在最小的接口上;
- 做法: 把臃肿接口拆成若干细化接口;
- 收益: 降低类之间的依赖程度, 避免实现方被迫实现用不到的方法;
依赖倒置原则要求什么?
- 定义: 依赖接口或抽象类而不是具体类;
- 做法: 用委托把具体逻辑抽离到类外部, 由外部注入;
- 收益: 上层模块不必随下层实现变化而修改, 从而支撑开闭原则;