六大原则:单一职责原则、里氏替换原则、依赖倒置原则、接口隔离原则、迪米特法则、开闭原则
1.单一职责原则
单一原则,官方说法:there should never be more than one reason for a class to change,即有且仅有一个原因引起类的变更。
企业就是每个类所做的事情应该统一,比如实体类只写相关属性,dao类只写数据库相关操作,service类写业务逻辑,controller类接收request请求并返回相应页面。
单一职责的好处:①:类的复杂性降低 ②:可读性提高 ③:可维护性提高 ④:需求变更引起的风险降低,一个接口修改只会对相应的实现类有影响,对其他接口不会产生影响,这对系统的扩展性和可维护性有非常大的帮助
无论是接口、类或者方法都应该使用单一职责原则,这将使我们减少因变更引起的工作量。
2.里氏替换原则
里氏替换的目的就是增强程序的健壮性,版本升级时也可以保持很好的兼容性。即使增加子类,原由的子类也可以继续运行。实际项目的当中,每个子类对应不同的业务,使用父类作为参数,传递不同的子类完成不同的业务逻辑。
里氏替换是为继承梳理了一个良好的规范,它需要遵循以下规则:
1) 子类必须完全实现父类的方法
2) 子类可以有自己的个性,即拥只属于自己的属性和方法
3) 覆盖或实现父类的方法时,参数可以被放大
4) 覆盖或实现父类的方法时,返回值可以被缩小
3.依赖倒置原则
依赖倒置原则含义:高层模块不应该依赖于底层模块,两者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象
依赖倒置在java中的体现:模块间的依赖通过抽象发生,实现类之间不发生直接的依赖关系,其依赖关系是通过接口或抽象类产生的; 接口或抽象类不依赖于实现类; 实现类依赖于接口或抽象类。
依赖倒置其实就是面向接口编程。通过抽象(抽象类或接口)是各个类或模块的实现彼此独立,不相互影响,实现模块间的松耦合。
实现依赖倒置应遵循的规则?
1)每个类尽量都有接口或抽象类,或者两者都具备(有了抽象才可能依赖倒置)
2)变量的表面类型尽量是接口或抽象类
3)任何类都不应该从具体类派生(即继承的类应该是接口或抽象类)
4)尽量不要复写基类的方法(即不要重写父类的普通方法)
5)结合里氏替换原则
4.接口隔离原则
接口隔离即对接口进行约束
1)接口尽量小(即接口职责尽量细化)
2)接口要高内聚(提高接口、类、模块的处理能力,减少对外界的交互)
3)接口设计是有限度的(理论越小越好,但是小也带来了接口的复杂化)
5.迪米特法则
又称最少知识原则,即一个对象应该对其他对象有最少的了解,也就是一个类对自己需要耦合的类知道的越少越好。
迪米特的核心观念是类间解耦,弱耦合,只有这样才能提高类的复用率。但是类之间的调用不能超过两级,级数越多系统越复杂,维护越困难。
6.开闭原则
开闭原则定义:Software entities like classes,modules and functions should be open for extension but closed for modifications(一个软件实体如类、模块和方法应该对扩展开放,对修改关闭)
软件实体:1)项目或软件产品中按一定逻辑规则划分的模块 2)抽象和类 3)方法