面向对象的六种原则:
- 概述:面向对象是一种编程思想,包括三大特性和六大原则,其中,三大特性指的是封装、继承和多态;六大原则指的是单一职责原则、开闭式原则、迪米特原则、里氏替换原则、依赖倒置原则以及接口隔离原则
- 六种原则的详解:
- 单一职责原则:一个类,只有一个引起它变化的原因应该只有一个职责 每一个职责都是变化的一个轴线,如果一个类有一个以上的职责,这些职责就耦合在了一起。这会导致脆弱的设计。当一个职责发生变化时,可能会影响其它的职责。另外,多个职责耦合在一起,会影响复用性 但是这也是非常有争议的一种原则 也是一种非常重要的原则 单一职责的划分界限并不总是那么清晰,很多时候都是需要靠个人经验来界定(即使在jdk中也是有不满足单一职责的类 如 Date类 这一点也是被人所诟病的)
- 开闭原则:开闭原则是Java世界里最基础的设计原则,它指导我们如何建立一个稳定的、灵活的系统开闭原则的定义简单的说就是在进行类 方法 模块等应该对于扩展是开放的,但是对于修改是封闭的在软件开发过程中,最不会变化的就是变化本身。产品需要不断升级、维护,没有一个产品从第一个版本开发完就再没有变化 了,除非下一个版本诞生之前它已经被终止 产品需要升级,修改原有代码可能引发其他问题,那么如何确保原有软件模块的正确性,以及尽量少地影响原有模块,答案就是开闭原则
- 里氏替换原则:里氏替换原则定义是比较的复杂 但是能简单的解释就是使用能引用基类的地方都能透明的使用其子类对象通俗点讲,只要父类能出现的地方子类就可以出现,而且替换为子类也不会产生任何错误或者异常,使用者可能不知道是父类还是子类。但是反过来就不行了,有子类出现的地方,父类未必就能适应。说了这么多,其实最终总结就两个字:抽象
- 依赖倒置原则: 依赖倒置原则有以下几个关键点:高层模块不应该依赖低层次模块,两者都应该依赖其抽象 抽象不应该依赖细节 细节应该依赖抽象在java语言中,抽象就是指接口或抽象类,两者都是不能直接被实例化的;细节就是实现类,实现接口或继承抽象类二产生的类就是细节,其特点就是,可以直接被实例化,也就是加上一个关键字new产生一个对象。高层模块就是调用端,底层模块就是具体实现类。依赖倒置原则在java语言中的表现就是:模块间的依赖通过抽象发生,实现类之间不发生直接的依赖关系,其依赖关系是通过接口或抽象类产生的这又是一个将理论抽象化的实例,其实一句话就可以概括:面向接口编程,或者说面向抽象编程,这里的抽象指的是接口或者抽象类。面向接口编程是面向对象的精髓之一,也就是上面强调的抽象 抽象的东西都是比较的稳定的
- 接口隔离原则:使用多个隔离的接口,比使用单个接口要好。本意降低类之间的耦合度,而设计模式就是一个软件的设计思想,从大型软件架构出发,为了升级和维护方便 说白了 就是依赖的接口尽可能的小
- 迪米特法则:又叫做是最小知道原则 一个对象应该对其他对象有最少的了解。通俗地讲,一个类应该对自己需要的耦合或调用的类知道得最少,类的内部如何实现与调用者或者依赖者没关系,调用者或者依赖者只需要知道它需要的方法即可,其他的可一概不用管。类与类直接的关系越密切,耦合度也就越大,当一个类发生改变时,对另一个类的影响也越大
- 最后的一点就是 :在实际的工作中 编码往往不是最困难的 最困难的就是后续的升级、维护过程中让应用系统能够拥抱变化 也就是不破坏系统稳定性的前提下保持高可扩展性、高内聚、低耦合(这一点也是最困难的)而使用这六大原则就是第一步