面向对象程序的5大设计原则

1.单一职责原则(Single-Resposibility Principle)
定义:一个类只需要做好一件事,并且应该仅有一个引起它变化的原因
本原则是“高内聚、低耦合”在面向对象原则的引申,这里的“职责”可以理解为“引起变化的原因”,这样大大的提高内聚性,如果职责过多,可能引起它变化的原因也越多,这会导致职责的相互影响,从而降低了内聚性。


2.开放封闭原则(Open-Closed Principle)
定义:软件实体应该是可扩展的,而不可修改的。
本原则是所有原则的核心,紧紧围绕着变化展开,它主要体现在两个方面:
(i)对扩展开放,就意味着有新的需求和变化,可以对程序的现有代码进行外部扩展。
(ii)对修改封闭,就意味着类的设计一旦设计完成,就可以独立完成其工作,不需要对其修改。
实现开闭原则的主要思想是对抽象编程,而不是具体编程,因为抽象比较稳定。这样可以让类依赖于固定的抽象,所以修改是封闭的;而通过面向对象的继承和多态机制,又可以实现对抽象类的继承,通过重写其方法来改变固有行为,实现新的拓展。


3.依赖倒置原则(Dependecy-Inversion Principle)
定义:抽象不依赖于具体,具体依赖于抽象
本原则的核心思想是:依赖于抽象,具体也就是高层模块不依赖于底层模块,二者都同依赖于抽象。抽象的稳定性决定了系统的稳定性,因为抽象是不变的,依赖于抽象是面向对象设计的精髓,也是依赖倒置原则的核心。
依赖于抽象是一个通用的原则,而有时候依赖于细节是在所难免的,必须权衡在抽象和具体之间的取舍。依赖于接口,就是接口编程,不要对实现编程。


4.接口分离原则(Interface-Segregation Principle)
定义:多个专用接口优于一个单一的通用接口
本原则体现在,接口应该是内聚的,所以要避免“胖接口”,一个类对另外一个类的依赖应该建立在最小的接口上。
接口有效的将细节和抽象分离,接口分离强调接口的单一性,而胖接口存在着明显的弊端,会导致实现的类型必须完全实现接口的所以方法、属性等;但是有时候,实现类型并不需要所有的接口定义,在设计上就是浪费,在以后修改时,牵一发而动全身,一种毁灭性的灾难,在这种情况下,我们需要讲胖接口分解为多个特定的定制化方法,使得客户端仅仅依赖于它们的实际调用的方法。
分离的方法:

(i)委托分离:通过增加一个新的类型来委托来委托客户的请求,隔离客户和接口的直接依赖,但是会增加系统的开销

(ii)多重继承分离,通过接口多继承来实现来实现客户的需求。


5.Liskov替换原则(Liskov-Substituion Principle)

定义:子类必须能够替换掉它们的基本类

本原则和开放封闭原则关系密切,正是子类型的可替换性,才使得使用基类型模块无需修改就可扩充。






你可能感兴趣的:(JAVA)