1.单一职责原则(Single Responsibility Principle)
降低类的复杂度,一个类只负责一项职责提高类的可读性,可维护性降低变更引起的风险通常情况下,我们应当遵守单一职责原则,只有逻辑足够简单,才可以在代码级违反单一职责原则;只有类中方法数量足够少,可以在方法级别保持单一职责原则
2.接口隔离原则(Interface Segregation Principle)
客户端不应该依赖它不需要的接口,即一个类对另一个类的依赖应该建立在最小的接口上。举例:一个类如果要实现一个接口,那么就要实现这个接口要求的所有方法,如果这个接口里面包含这个类不需要的方法,那么就会造成接口污染,这是不好的设计,会对系统留下隐患。接口需要拆分,粒度分解。
3.依赖倒转原则(Dependence Inversion Principle)
程序要依赖于抽象接口,不要依赖于具体实现。简单的说就是要求对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块间的耦合。高层模块不应该依赖低层模块,高层模块和低层模块都应该依赖于抽象。抽象不应该依赖于具体,具体应该依赖于抽象。从Java角度看待依赖倒转原则的本质就是:面向接口(抽象)编程。每个具体的类都应该有其接口或者基类,或者两者都具备。类中的引用对象应该是接口或者基类。任何具体类都不应该派生出子类。尽量不要覆写基类中的方法。结合里氏代换原则使用。
4.里氏替换原则(LSP)
子类可以扩展父类的功能,但不能改变父类原有的功能。也就是说:子类继承父类时,除添加新的方法完成新增功能外,尽量不要重写父类的方法。继承时需要遵循里氏替换原则
5.开闭原则(OCP)
一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。模块应尽量在不修改原(是"原",指原来的代码)代码的情况下进行扩展。1、通过接口或者抽象类约束扩展,对扩展进行边界限定,不允许出现在接口或抽象类中不存在的public方法,也就是扩展必须添加具体实现而不是改变具体的方法。2、参数类型、引用对象尽量使用接口或者抽象类,而不是实现类,这样就能尽量保证抽象层是稳定的。3、一般抽象模块设计完成(例如接口的方法已经敲定),不允许修改接口或者抽象方法的定义。
6.迪米特法则(DP)
最少知道原则:如果两个软件实体无须直接通信,那么就不应当发生直接的相互调用,可以通过第三方转发该调用。其目的是降低类之间的耦合度,提高模块的相对独立性。一个对象的"朋友"包括他本身(this)、它持有的成员对象、入参对象、它所创建的对象。尽量少发布public的变量和方法,一旦公开的属性和方法越多,修改的时候影响的范围越大。如果一个方法放在本类中,既不产生新的类间依赖,也不造成负面的影响,那么次方法就应该放在本类中。
7.合成复用原则(CRP)
基本介绍:原则是尽量使用合成/聚合的方式,而不是使用继承依赖关系:在b类中写个方法,传参进去聚合关系:一个A类对象的成员变量,通过set方法设置进来组合关系:b类中A是成员变量,直接new
