灵活软件之路——面向对象的六大原则

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Lee_Swifter/article/details/54287629

本文是个人在学习《Android 源码设计模式》的读书笔记,仅供学习。

1、单一职责原则

Single Responsibility Principle, SRP的定义是:就一个类而言,应该仅有一个引起它变化的原因。简单来说,一个类中应该是一组相关性很高的数据的封装。

2、开闭原则

Open Close Principle,OCP,Java中最基础的设计原则,其定义是:软件中的对象(类、模块、函数等)应该对于扩展是开放的,但是对于修改是封闭的。因此,当软件需求发生变化时,我们应该尽量通过扩展的方式来实现变化,而不是通过修改已有的代码来实现。

软件开发过程中,最不会变化的就是变化本身。程序一旦开发完成,程序中的一个类的实现只应该因错误而被修改,新的或者改变的特性应该通过新建不同的类实现,新建的类可以通过继承的方式来重用原类的代码。

在实现开闭原则中,就需要使用接口了,因为扩展原代码功能的主要方式就是继承。

3、里氏替换原则

Liskov Substitution Principle,LSP, 其第一种定义是:如果每一个类型为S的对象O1,都有类型为T的对象O2,使得以T定义的所有程序P在所有的对象O1都代换成O2时,程序P的行为没有发生变化,那么类型S是类型T的子类型。里氏替换的第二种定义是:所有引用基类的地方必须能透明地使用其子类的对象

面向对象语言的三大特性:封装、继承、多态。里氏替换原则就是依赖于继承、多态这两个特性。里氏替换对依赖注入的问题提供了指导原则,也就是建立抽象,通过抽象建立规范,具体的实现在运行时替换掉抽象,保证系统的扩展性、灵活性。

开闭原则和里氏替换原则往往是生死相依、不离不弃的,特别是在依赖注入的问题上,通过里氏替换来达到对扩展开放,对修改关闭的效果。这两个原则都同事强调了一个OOP的重要特性——抽象,在开发过程种运用抽象是走向代码优化的重要一步

对于里氏替换原则,个人认为这个原则,在Java语言层面就已经完成了,简单而言,就是基类类型的形参对应子类对象的实参。

4、依赖倒置原则

Dependence Inversion Principle,DIP,依赖倒置原则指导了一种特定的解耦形式,使得高层次的模块不依赖于低层次的模块的实现细节的目的,依赖模块被颠倒了。

依赖倒置原则由一下几个关键点:
- 高层模块不应该依赖底层模块,两者都应该依赖其抽象;
- 抽象不应该依赖细节;
- 细节应该依赖抽象;

在Java语言中,抽象就是指接口或抽象类,两者都是不能直接被实例化的;细节就是实现类,实现接口或继承抽象类而产生的类就是细节。依赖倒置原则在Java语言中的表现就是:模块间的依赖通过抽象发生,实现类之间不发生直接的依赖关系,其依赖关系是通过接口或抽象类产生的,即面向接口编程。概括起来就是:依赖抽象,而不依赖具体实现

5、接口隔离原则

Interface Segregation Principles,ISP,接口隔离原则的定义是:客户端不应该依赖它不需要的接口。另一种定义:类间的依赖关系应该建立在最小的接口上

接口隔离原则将非常庞大、臃肿的接口拆分成更小的和更具体的接口,这样客户就会指需要知道他们感兴趣的方法。接口隔离原则的目的是系统解开耦合,从而容易重构、更改和重新部署。

以上五个原则在21世纪早期被定义为SOLID原则,作为面向对象编程的5个基本原则,基本特点就是:抽象、单一职责、最小化

6、迪米特原则

Law of Demeter,LOD,也称为最少只是原则一个对象更应该对其他对象有最少的了解。通俗的讲:一个类应该对自己需要耦合或调用的类知道得最少,类的内部如何实现与调用者或者依赖者没关系,调用者或者依赖者只需要知道它需要的方法即可,其他的可一概不管。

应用六大原则的目的

应用软件的开发过程中,不能仅仅只关于去完成,也要考虑到后续的升级和维护过程。简单的说明就是拥抱变化,拥抱变化也就一味着在满足需求且不破坏系统稳定性的前提下保持高可扩展性、高内聚、低耦合。这也是循序六大原则的目的。

猜你喜欢

转载自blog.csdn.net/Lee_Swifter/article/details/54287629