一、优化代码的第一步——单一职责原则(Single Responsibility Principle SRP)
定义:
就一个类而言,应该仅有一个引起它变化的原因。 一个类应该是一组相关性很高的函数、数据的封装。很多时候都是需要靠个人经验来界定,最大的问题就是对职责的定义, 什么是类的职责,以及怎么划分类的职责。
二、让程度更稳定、更灵活——开闭原则(Open Close Principle OCP)
定义:
软件中的对象(类、模块、函数等)应该对于扩展是开放的,对于修改是封闭的。 当软件需要变化时,我们应该尽量通过扩展的方式来实现变化,而不是通过修改已有的代码 来实现。 遵循开闭原则的重要手段应该是通过抽象
三、构建扩展性更好的系统——里氏替换原则(Liskov Substitution Principle LSP)
定义:
所有引用基类的地方必须能透明地使用其子类的对象。 里氏替换就是依赖于继承、多态这两大特性。 里氏替换原则简单来说就是,只要父类能出现的地方子类就可以出现, 而且替换为子类也不会产生任何错误或异常,使用者可能根本就不需要知道是父类还是子类。但是,反过来就不行了,有子类出现的地方,父类未必能适应
继承的优点:
1.代码重用,减少创建类的成本,每个子类都拥有父类的方法和属性;
2.子类与父类基本相似,但又与父类有所区别;
3.提高代码的可扩展性;
继承的缺点:
1.继承是侵入性的,只要继承就必须拥有父类的所有属性和方法;
2.可能造成子类代码冗余、灵活性降低,因为子类必须拥有父类的属性和方法;
开闭原则是和里氏替换原则鉴往往是生死相依、不弃不离的,通过里氏替换来达到对扩展开放对修改关闭的效果。
四、让项目拥有变化的能力——依赖倒置原则(Dependence Inversion Principle DIP)
定义:
指代了一种特定的解耦形式,使得高层次的模块不依赖于低层次的模块的实现细节的目的
关键点:
1.高层模块不应该依赖低层模块,两者都应该依赖其抽象;
2.抽象不应该依赖细节;
3.细节应该依赖抽象;
高层模块就是调用端,低层模块就是具体实现类。在Java语言中的表现就是: 模块间的依赖通过抽象发生,实现类之间不发生直接的依赖关系,其依赖关系是通过接口或
抽象类产生的。
五、系统有更高的灵活性——接口隔离原则(InterfaceSegregation Principles ISP)
定义:
客户端不应该依赖它不需要的接口/类间的依赖关系应该建立在最小的接口上。 接口隔离原则将非常庞大、臃肿的接口拆分成更小的和更具体的接口,这样客户将会只需要
知道他们感兴趣的方法。 接口隔离原则的目的是系统解开耦合,从而容易重构、更改和重新部署。
六、更好的可扩展性——迪米特原则(Law of Demeter LOD) 也称最少知识原则
定义:
一个对象应该对其他对象有最少的了解,通俗的讲,一个类应该对自己需要耦合或调用的类知道得最少。
Only talk to your immedate frieds(只与直接的朋友通信)
在后续的升级、维护过程中让应用系统能够拥抱变化。拥抱变化也就意味着在满足需求且不破坏系统稳定性的前提下保持高可扩展性、高内聚、低耦合,在经历了各版本的 变更之后依然保持灵活、稳定的系统架桥