单一职责原则:Simple Responsibility Principle 简称 SRP编程
这个原则比较难定义,可是也是比较好理解的。简单来讲就是接口要作到职责分明,什么该作什么不应作要分清楚。设计模式
单一职责的好处函数
类的复杂性下降,实现什么的职责都有清晰明确的定义spa
可读性提升,复杂性下降设计
可维护性提升,可读性提供对象
更变引发的风险下降继承
里氏替换原则 (Liskov Substitution Principle , LSP) 接口
第一种定义:若是对每一个类型为S的对象o1,都有类型为T的对象o2,使得以T定义的全部程序P在全部的对象o1都替换成o2时,程序P的行为没有发生变化,那么S是T的子类型。ip
第二种定义:全部引用基类的地方必须能透明地使用其子类的对象。ci
官方的说明太官方了。。。简单来讲,只要父类能出现的地方子类就能够出现,并且替换成子类也不会产生任何的错误或者异常。(给我最直接的感受就是里氏替换原则就是为JAVA里的继承定义了一个规范,
在JAVA里的继承,子类能够强制转换成父类,父类不能强制转换成子类)
依赖倒置原则 (Dependence Inversion Principle , DIP)
依赖倒置原则原始定义是 : High level modules should not depend upon low level modules . Both should depend upon abstractions . Abstractions should not depend upon details . Details should depend upon abstractions.
很容易理解,高层模块不该该依赖底层模块,二者都应该依赖其抽象,抽象不该该依赖细节,细节应该依赖抽象。从JAVA的方向看,模块间的依赖经过抽象过程,实现类之间不发生直接的依赖关系,其依赖关系 是经过接口和抽象产生的;接口或抽象类不依赖实现类,实现类依赖接口或抽象类。(这不就是面对接口编程的精髓吗?)
采用依赖倒置原则的本质就是经过抽象(接口或抽象类)使各个类或模块的实现彼此独立,能够减小类之间的耦合性,提升系统的稳定性,下降并行开发引发的风险,提升代码的可读性和可维护性。
接口隔离原则第一种定义:客户端不该该依赖它不须要的接口,第二种定义:类间的依赖关系应该创建在最小的接口上。简单的来讲就是创建接口要尽可能细化,同时接口中的方法尽可能少。看起来与单一职责原则很 像,其实两个原则的审视角度不相同,单一职责要求的是类和接口的职责单一,注重的是职责,是业务逻辑上的划分,而接口隔离原则要求接口的方法尽量少(拆分接口时必须知足单一职责原则),接口要高内聚,定制服务,接口设计是有限度的(并非越小越好,要根据实情去设计)
迪米特法则(Law of Demeter , LoD)也称为最少知识原则
定义:一个对象应该对其余对象有最少的了解,通俗地说,一个类应该对本身须要耦合或调用的类知道得最少(被调用的类逻辑多复杂跟你不要紧,你只是调用它提供的方法而已)
迪米特法则的核心观念是类间解耦,弱耦合,只有弱耦合了之后,类的复用率才能够提升
开闭原则定义:一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。(通俗讲一个程序应该经过扩展来实现变化,而不是经过修改已存在的代码来实现变化)