这是关于面向对象设计的五个原则(即 SOLID 原则)的描述:
SRP(单一职责原则)
- 每个职责应该是一个独立的类,因为每个职责都是变化的轴。
- 一个类应该有一个,且仅有一个,变化的原因。
- 如果对业务规则的更改导致一个类的更改,那么对数据库模式、GUI、报告格式或系统的任何其他部分的更改都不应该强制该类更改。
OCP(开闭原则)
一个类应该对扩展开放,对修改关闭。
换句话说,你永远不应该需要改变现有的代码或类:所有新的功能都可以通过添加新的子类或方法,或通过通过委托重用现有的代码来添加。这可以防止在现有代码中引入新的错误。如果你从不改变它,就不会破坏它。它还可以防止你在现有代码中修复现有错误,如果采取到了极端的情况。
LSP(里氏替换原则)
希望达到的替换属性是:如果对于类型 S 的每个对象 o1,都有类型 T 的对象 o2,使得对于所有以 T 为基础定义的程序 P,当 o1 替换 o2 时,P 的行为不变,那么 S 是 T 的子类型。
— Barbara Liskov,《数据抽象和层次结构》,SIGPLAN Notices,23,5(1988年5月)。
ISP(接口隔离原则)
一个类对另一个类的依赖应该依赖于最小的可能接口。
DIP(依赖反转原则)
- A. 高层模块不应该依赖低层模块。两者都应该依赖于抽象。
- B. 抽象不应该依赖于细节。细节应该依赖于抽象。
迪米特法则
只与你的直接朋友交流。
- 你的方法可以直接调用其类中的其他方法。
- 你的方法可以直接调用其自身字段上的方法(但不能调用字段的字段上的方法)。
- 当你的方法带有参数时,可以直接调用这些参数上的方法。
- 当你的方法创建本地对象时,该方法可以调用本地对象上的方法。
警告:
- 不应该在全局对象上调用方法(但可以将其作为参数传递)。
- 在除了 a 的类之外的某个类中,不应该存在消息链 a.getB().getC().doSomething()。