7条原则:单一职责原则、开闭原则、里式替换原则、依赖注入原则、接口分离原则、迪米特原则、优先使用组合而不是继承原则。
单一职责原则SRP:
系统中的每一个对象都应该只有一个单独的职责,而所有对象所关注的就是自身职责的完成。
高内聚,低耦合。每个类应该只有一个职责,对外只能提供一种功能。
里式替换原则LSP:
在任何父类出现的地方都可以用它的子类来替代。
同一个继承体系中的对象应该有共同的行为特征。关注于怎样良好地使用继承。
依赖注入原则DIP:
要依赖于抽象,不要依赖于具体的实现。
在应用程序中,所有的类如果使用或依赖于其他的类,则都应该依赖于这些其他类的抽象类,而不是这些其他类的具体实现类,这样才能保证系统的可复用性和可维护性,这就要求开发人员在编程时针对接口编程而不针对实现编程。
依赖注入原则有如下三点说明:
高层模块不应该依赖低层模块,两者都应该依赖于抽象(抽象类或接口)
抽象(抽象类或接口)不应该依赖于细节(具体实现类)
细节(具体实现类)应该依赖抽象
依赖注入原则的本质就是通过抽象使各个类或模块的实现彼此独立,不相互影响,实现模块间的松耦合。
依赖注入的三种实现方式
1、通过构造函数传递依赖对象(在构造函数中的需要传递的参数是抽象类或接口的方式实现)
2、通过setter方法传递依赖对象(设置的setXXX方法中的参数为抽象类或接口,来实现传递依赖对象)
3、接口声明实现依赖对象
接口分离原则ISP:
不应该强迫客户程序依赖它们不需要使用的方法。
一个接口不需要提供太多的行为,一个接口应该只提供一种对外的功能,不应该把所有的操作都封装到一个接口中
迪米特原则LOD:
一个对象应当对其它对象尽可能少地了解,降低各个对象之间的耦合,提供系统的可维护性。在模块之间,应该只通过接口来通信,而不理会模块的内部工作原理,它可以使各个模块耦合程度降低,促进软件的复用。
开闭原则OCP:
一个对象对扩展开发,对修改关闭。
对类的改动是通过增加代码进行的,而不是改动现有的代码。