目录
- 单一原则
- 里氏替换原则
- 依赖倒置原则
- 接口隔离原则
- 迪米特法则
- 开闭原则
1. 单一原则(SRP)
定义:不存在多于一个导致该类变化的原因。
简单的说:单一原则就是一个类只负责一项职责,达到高内聚、低耦合的效果,如果有多个不同的功能,最好分在不同的类中进行实现。
优点:
1.可以降低类的复杂度,一个类只负责一项职责,其逻辑肯定要比负责多项职责简单的多;
2.提高类的可读性,提高系统的可维护性;
3.变更引起的风险降低,变更是必然的,如果单一职责原则遵守的好,当修改一个功能时,可以显著降低对其他功能的影响。
2. 里氏替换原则(LSP)
简单的说:子类可以扩展父类的功能,但不能改变父类原有的功能。
总结:
1.子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法。
2.子类中可以增加自己特有的方法。
3.当子类的方法重载父类的方法时,方法的前置条件(即方法的形参)要比父类方法的输入参数更宽松。
4.当子类的方法实现父类的抽象方法时,方法的后置条件(即方法的返回值)要比父类更严格。
3. 依赖倒置原则(DIP)
定义:高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。
含义:在java语言中,抽象就是指接口或抽象类,两者都是不能直接被实例化的。细节就是实现类,实现接口或继承抽象类而产生的类就是细节,其特点就是,可以直接被实例化。高层模块就是调用端,低层模块就是具体实现类。
核心:模块间的依赖通过抽象发生,实现类之间不发生直接的依赖关系,其依赖关系是通过接口或者抽象类产生的。简而言之就是 面向接口编程 或者 面向抽象编程。
4. 接口隔离原则(ISP)
定义:客户端不应该依赖他不需要的接口,类间的依赖关系应该建立在最小的接口上。
含义:
1.建立单一接口,不要建立庞大臃肿的接口,尽量细化接口,接口中的方法尽量少。
也就是说,我们要为各个类建立专用的接口,而不要试图去建立一个很庞大的接口供所有依赖它的类去调用。
2.在程序设计中,依赖几个专用的接口要比依赖一个综合的接口更灵活。
3接口是设计时对外部设定的“契约”,通过分散定义多个接口,可以预防外来变更的扩散,提高系统的灵活性和可维护性。
注意事项:
1.接口尽量小,但是要有限度。对接口进行细化可以提高程序设计灵活性是不争的事实,但是如果过小,则会造成接口数量过多,使设计复杂化。所以一定要适度。
2.为依赖接口的类定制服务,只暴露给调用的类它需要的方法,它不需要的方法则隐藏起来。只有专注地为一个模块提供定制服务,才能建立最小的依赖关系。
3.提高内聚,减少对外交互。使接口用最少的方法去完成最多的事情。
5. 迪米特法则(LOD、最少知道原则)
定义:一个对象应该对其他对象保持最少的了解。
简单的说:就是一个类对自己依赖的类知道的越少越好;对于被依赖的类来说,无论逻辑多么复杂,都尽量地的将逻辑封装在类的内部,对外除了提供的public方法,不对外泄漏任何信息。
6. 开闭原则(OCP)
定义:一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。
简单的说:程序一旦开发完成,程序中一个类的实现只应该因错误而被修改,新的或者改变的特性应该通过新建不同的类来实现,新建的类可以通过继承的方式来重用原来的代码。