单一职责原则
- 就一个类而言,应该仅有一个引起它变化的原因
- 如果一个类承担的职责过多,这些职责耦合在一起,一个职责的变化可能削弱或者一直这个类完成其他职责的能力,设计脆弱,变化会导致意向不到的破坏。
- 软件设计要发现职责,并把那些职责相互分离,判断是否需要分离的依据:如果你能想到多余一个的动机去改变一个类,那么这个类就有多于一个的职责
开放封闭原则
- 类,模板,函数等,应该可以扩展,但是不可修改
- 两个特征:对于扩展是开放的,对于更改是封闭的
- 面对需求,对程序的改动是通过增加新代码进行的,而不是更改现有的代码
- 开放封闭原则是面型对象设计的核心所在,遵循这个原则可以带来面向对象技术所声称的巨大好处,可维护、可扩展、可复用、灵活性好,开发人员应该仅对程序中呈现出频繁变化的那些部分作出抽象,但不要对程序中每个部分都刻意的进行抽象
依赖倒置原则
- 高层模块不应该依赖底层模块,两个都应该依赖抽象。
- 抽象不应该依赖细节,细节应该依赖抽象
里氏替换原则
- 子类必须能够替换掉它们的父类型
- 只有当子类可以替换掉父类,软件单位的功能不受到影响时,父类才能真正的被复用,而子类也能够在父类的基础上增加行为。
迪米特法则:
- 如果两个类不直接通信,那么这两个类就不应该发生直接的相互作用。如果一个类需要调用另一个类的某个方法的话, 可以通过第三个类转发这个调用
- 在类的结构设计上,每一个类都应该尽量降低成员的访问权限
- 该法则在适配器模式、解释模式等中有强烈的体现
- 强调类之间的松耦合,类之间的耦合越弱,越有利于复用