-
单一职责
- 从业务角度划分职责,不同业务之间的职责不同,在编码时应该根据不同职责来划分。
- 方法、接口、类的要处理的功能要单一,多个功能可是抽离多个类处理,可以利用继承获得综合功能。
- 将引起变化的因素降低到一个,这个变化只会引发对应的类修改,而对其他类无影响。
-
里氏替换
- 用来指导如何设计父类和子类的。
- 子类不应该去改写父类的非抽象方法,而应该实现父类的抽象方法,外部应该调用父类的非抽象方法,该方法再调用子类的特殊实现,来达到代码共享的作用。
- 如果在继承关系中出现了替换类实例之后发现错误的问题,这个时候应该考虑是不是再往上抽象一个层次出来,降低子类的耦合性和依赖。
-
依赖倒置
- 层级之间互相依赖接口编程。
- 类与类之间的差异细节可以通过接口来统一约束。
- 依赖的倒置注入,例如:A=>B(A依赖B),变为通过IOC将B实例注入到A中,互相之间不需要强关联,只需要通过中间件来实现依赖。
-
接口隔离
- 在架构设计上让接口职责单一,避免接口因为变更变得更大,不同作用没有关联的可以抽离其它接口。
- 一个综合功能可以通过多个小的接口多继承实现,可以将复杂度通过小接口分而治之。
- 小接口让代码更加内聚,重复的操作往往可以实现相同接口,对外也是提供少的接口
-
迪米特法则
- 最小知识原则
- 类应该设计成更多的私有方法,尽量少的公开方法,将复杂实现封装在内部,只让外部知道最少的内容,有助于降低耦合性。
- 类与类之间互相独立不依赖,如果有关联,可以用过中介类实现。
- 一个类能设计成不变的就设计成不变的。
-
开闭原则
- 一个类一旦完成就不应该再去修改,而是去扩展。
- 需求是总在变化的,代码不能总跟着需求去变更,而是去新增一个新的类新的代码实现。