常见代码重构技巧( 二 )


要写出高质量代码,我们就需要掌握一些更加细化、更加能落地的编程方法论,这就包含面向对象设计思想、设计原则、设计模式、编码规范、重构技巧等 。
如何重构 SOLID原则
单一职责原则
【常见代码重构技巧】一个类只负责完成一个职责或者功能,不要存在多于一种导致类变更的原因 。
单一职责原则通过避免设计大而全的类,避免将不相关的功能耦合在一起,来提高类的内聚性 。同时,类职责单一,类依赖的和被依赖的其他类也会变少,减少了代码的耦合性,以此来实现代码的高内聚、松耦合 。但是,如果拆分得过细,实际上会适得其反,反倒会降低内聚性,也会影响代码的可维护性 。
开放-关闭原则
添加一个新的功能,应该是通过在已有代码基础上扩展代码(新增模块、类、方法、属性等),而非修改已有代码(修改模块、类、方法、属性等)的方式来完成 。
开闭原则并不是说完全杜绝修改,而是以最小的修改代码的代价来完成新功能的开发 。
很多设计原则、设计思想、设计模式,都是以提高代码的扩展性为最终目的的 。特别是 23 种经典设计模式,大部分都是为了解决代码的扩展性问题而总结出来的,都是以开闭原则为指导原则的 。最常用来提高代码扩展性的方法有:多态、依赖注入、基于接口而非实现编程,以及大部分的设计模式(比如,装饰、策略、模板、职责链、状态) 。
里氏替换原则
子类对象( of / class)能够替换程序()中父类对象( of base/ class)出现的任何地方,并且保证原来程序的逻辑行为()不变及正确性不被破坏 。
子类可以扩展父类的功能,但不能改变父类原有的功能
父类中凡是已经实现好的方法(相对于抽象方法而言),实际上是在设定一系列的规范和契约,虽然它不强制要求所有的子类必须遵从这些契约,但是如果子类对这些非抽象方法任意修改,就会对整个继承体系造成破坏 。
接口隔离原则
调用方不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上 。接口隔离原则提供了一种判断接口的职责是否单一的标准:通过调用者如何使用接口来间接地判定 。如果调用者只使用部分接口或接口的部分功能,那接口的设计就不够职责单一 。
依赖反转原则
高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象 。
迪米特法则
一个对象应该对其他对象保持最少的了解
合成复用原则
尽量使用合成/聚合的方式,而不是使用继承 。
单一职责原则告诉我们实现类要职责单一;里氏替换原则告诉我们不要破坏继承体系;依赖倒置原则告诉我们要面向接口编程;接口隔离原则告诉我们在设计接口的时候要精简单一;迪米特法则告诉我们要降低耦合 。而开闭原则是总纲,告诉我们要对扩展开放,对修改关闭 。
设计模式
设计模式:软件开发人员在软件开发过程中面临的一般问题的解决方案 。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的 。每种模式都描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案 。
类型模式说明适用场景
创建型
单例
一个类只允许创建一个实例或对象,并为其提供一个全局的访问点
无状态/全局唯一/控制资源访问
工厂
创建一个或者多个相关的对象,而使用者不用关心具体的实现类
分离对象的创建和使用