java oop 六大设计原则

来源:互联网 发布:淘宝网c2c商业模式 编辑:程序博客网 时间:2024/05/16 07:11

java oop 六大设计原则

高内聚低耦合,是软件工程中的概念,是判断设计好坏的标准,主要是面向对象的设计:
类的内聚性是否高,耦合度是否低。内聚和耦合密切相关,同其它模块存在强耦合关系的模块常意味这弱内聚,强内聚常意味着弱耦合。

高内聚
内聚就是一个模块内各个元素彼此结合的紧密程度,高内聚就是一个模块内各个元素彼此结合的紧密程度高。

耦合:
指软件系统结构中各模块间相互联系紧密(关联、感知和依赖)程度的一种度量,是衡量代码独立性的一个指标,是软件工程设计及编码质量评价的一个标准。耦合的强度依赖于以下几个因素:
模块对另一个模块的调用
模块向另一个模块传递的数据量
模块施加到另一个模块的控制的多少
模块之间接口的复杂程度

依赖即耦合
1、零耦合:两个类没有耦合关系
2、具体耦合:具体耦合发生在两个具体的类之间
3、抽象耦合:抽象耦合关系发生在一个具体和一个抽象类(或者是Java接口)之间

低耦合:
一个类对于自己依赖的类,知道的越少越好。不要让一个类依赖过多的类。否则这个类很容受外界的影响,并且因为这种影响要改变自身的代码(自身要适应)。
高内聚:
将实现逻辑都封装在类的内部,对public方法以外的信息,不轻易暴露给外界,高内聚单一责任原则的体现。

软件复用:
算法复用
数据结构复用
模型复用

面向对象的设计原则
主要的目的:如何设计类,更能很好的利用面向对象的特性

1、单一职责原则 SRP
Single Responsibility Principle,
要求的是类和接口的职责单一,即功能单一,注重的是“功能”,它是从功能上的划分,一个接口或类只有一个职责,它就是负责一件事情(一个类应该是一组相关性很高的函数、数据的封装)
2、开闭原则 OCP
Open Close Principle,软件中的对象(类、模块、函数等)应该对于扩展是开放的,但是,对于修改是封闭的
3、里氏替换原则 LSP
Liskov Substitution Principle,所有引用基类的地方必须能透明地使用其子类的对象,在软件中将一个基类对象替换成它的子类对象,程序将不会产生任何错误和异常,反过来则不成立

4、依赖倒置原则 DIP
Dependence Inversion Principle,针对接口编程,不要针对实现编程
高层模块不应该依赖低层模块,两者都应该依赖其抽象;
抽象不应该依赖细节;
细节应该依赖抽象
实际应用:
使用接口和抽象类进行变量类型声明、参数类型声明、方法返回类型声明,以及数据类型的转换等,而不要用具体类来做这些事情。
为了确保该原则的应用,一个具体类应当只实现接口或抽象类中声明过的方法,而不要给出多余的方法,否则将无法调用到在子类中增加的新方法

5、接口隔离原则 ISP
InterfaceSegregation Principles(接口隔离的目的是系统解耦,从而容易重构、更改和重新部署)
客户端不应该被强迫去依赖于它们不需要的接口。
类间的依赖关系应该建立在最小的接口上
接口隔离原则是从“服务”的角度来看的,它要求的是“服务”专一,是从服务的角度来划分的
接口是一个系统里的业务表现,只有深入了解业务逻辑:根据经验和常识决定接口的粒度大小,接口粒度太小,导致接口数据剧增,太大,灵活性降低,无法提供定制服务

接口隔离定义:
建立单一接口,不要建立臃肿庞大的接口。即接口尽量细化,同时接口中的方法尽量少。
从业务角度划分职责;接口里面的方法不要太多,否则权限控制不便,即与调用者无关的方法都暴露出来了。
应用原则:
接口要尽量小(建立单一接口,接口尽量细化,方法尽量少,功能单一):
根据接口隔离原则拆分接口时,首先必须满足单一职责原则
接口要高内聚【高内聚:提高接口、类、模块的处理能力,减少对外交互】:
要求接口中尽量少公布public方法,接口是对外的承诺,承诺越少对系统的开发越有利,变更的风险也就越少,同时也有利于降低成本。
定制服务:
系统设计时,需要考虑系统之间或模块之间的接口采用定制服务。只提供访问者需要的方法。
接口设计是有限度的:
接口设计粒度越小,系统越灵活,结构越复杂,开发难度越大,可维护性越低。把握好”度“。

6、迪米特原则
Law of Demeter LOD,也称为最少知识原则(Least Knowledge Principle)
一个对象应该对其他对象有最少的了解:
一个类应该对自己需要耦合或调用的类知道得最少,调用者或者依赖者只需要知道他需要的方法即可,其他的我一概不关心。(类与类之间的关系越密切(组合、聚合、依赖),耦合度越大,当一个类发生改变时,对另一个类的影响也越大)

迪米特原则指对信息的隐藏,即封装。在设计时需要注意以下几点:
1、在类的划分上,应当创建有弱耦合的类。类之间的耦合越弱,就越有利于复用。
2、在类的结构设计上,每个类都应降低访问权限,不要公开自己的属性,而是提供访问方法。
3、在类的设计上,只要有可能,一个类应当设计成不变类。
4、在对其他类的引用,一个对象对其对象的引用应当降到最低。

迪米特法则的核心观念就是类间解耦,弱耦合,只有弱耦合以后,类的复用率才可以提高。
其要求的结果就是产生了大量的中转或跳转类,导致系统的复杂性抽提高,同时降低了可维护性。
所以用进一定要衡量,既做到让结构清晰,又要做到高内聚低耦合

7、组合/聚合复用原则(CARP)
尽量使用组合/聚合,不要使用继承。
组合/聚合复用方式可以在运行期内动态的改变,具有很好的灵活性。
继承是在编译时就发生了的,所以无法在运行时改变,没有足够的灵活性

原创粉丝点击