面向对象的六大原则:
单一职责原则、开闭原则、里氏替换原则、依赖倒置原则、接口隔离原则、迪米特原则。
1、单一职责原则
英文名称:Single Responsibility Principle(SRP)
一个类应该具有单一的职责(职责可以理解为业务、功能)。
如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力。这种耦合会导致脆弱的设计,当变化发生时,设计会遭受到意想不到的破坏。
软件设计真正要做的许多内容,就是发现职责并把那些职责相互分离。
2、开闭原则
英文名称:Open Close Principle(OCP)
软件中的对象(类、模块、方法等)应该对于扩展是开放的,对于修改是封闭的。
面对需求,对程序的改动是通过增加新代码进行的,而不是更改现有的代码。
在我们最初编写代码时,假设变化不会发生。当变化发生时,我们就创建抽象来隔离以后发生的同类变化。我们希望的是在开发工作展开不久就知道可能发生的变化。查明可能发生的变化所等待的时间越长,要创建正确的抽象就越困难。
开发人员应该仅对程序中呈现出频繁变化的那些部分做出抽象,然而,对于应用程序中的每个部分都刻意地进行抽象同样不是一个好主意。拒绝不成熟的抽象和抽象本身一样重要。
3、里氏替换原则
英文名称:Liskov Substitution Principle(LSP)
所有引用基类的地方必须能透明地使用其子类的对象。
里氏替换原则的核心原理是抽象,抽象又依赖于继承这个特性。
建立抽象,通过抽象建立规范,具体的实现在运行时替换掉抽象,保证系统的扩展性、灵活性。开闭原则和里氏替换原则往往是生死相依、不弃不离的,通过里氏替换来达到对扩展开放,对修改关闭的效果。
4、依赖倒置原则
英文名称:Dependence Inversion Principle(DIP)
模块间的依赖通过抽象发生,其依赖关系是通过接口或抽象类产生的(面向接口编程或者说是面向抽象编程)。
依赖倒置原则有以下几个关键点:
(1)高层模块不应该依赖低层模块,两者都应该依赖其抽象;
(2)抽象不应该依赖细节;
(3)细节应该依赖抽象。
5、接口隔离原则
英文名称:Interface Segregation Principle(ISP)
类间的依赖关系应该建立在最小的接口上。
6、迪米特原则(最少知识原则)
英文名称:Law of Demeter(LOD)
一个对象应该对其他对象有最少的了解。
一个类应该对自己需要耦合或调用的类知道得最少,类的内部如何实现与调用者或者依赖者没关系,调用者或者依赖者只需要知道它需要的方法即可,其他的可一概不用管。类与类之间的关系越密切,耦合度越大,当一个类发生改变时,对另一个类的影响也越大。