跳到主要内容

SOLID 原则

单一职责原则要求什么?​

  • 职责: 一个类只承担一个功能的职责;
  • 判断: 若两个变化的理由总是一起出现, 才放在同一个类里;

开闭原则要求什么?​

  • 定义: 对扩展开放, 对修改关闭;
  • 目标: 在不修改原有类的基础上添加新功能;
  • 实现:
    • 用接口约束类逻辑;
    • 用依赖注入或委托把逻辑抽象到类外部;
interface InvoicePersistence {
save(invoice: Invoice): void;
}

class DatabasePersistence implements InvoicePersistence {
public save(invoice: Invoice) {
// 新增存储方式时只新增实现类, 不修改调用方
}
}

里氏替换原则要求什么?​

  • 定义: 若 B 是 A 的子类, 则使用 A 的任何场景都可以替换成 B;
  • 约束: 子类不能收窄父类承诺的行为与前置条件;
  • 反例: 鸵鸟继承会飞的鸟后重写 fly() 抛错, 见 组合优于继承;

接口隔离原则要求什么?​

  • 定义: 一个类对另一个类的依赖应建立在最小的接口上;
  • 做法: 把臃肿接口拆成若干细化接口;
  • 收益: 降低类之间的依赖程度, 避免实现方被迫实现用不到的方法;

依赖倒置原则要求什么?​

  • 定义: 依赖接口或抽象类而不是具体类;
  • 做法: 用委托把具体逻辑抽离到类外部, 由外部注入;
  • 收益: 上层模块不必随下层实现变化而修改, 从而支撑开闭原则;