架构师训练营第三周 - 代码重构
重构的由来
作为一个架构师,平时写写核心代码(核心代码:框架或类似框架的被依赖模块),review下开发同学的代码。
随着面对的业务越来越复杂,代码的扩展性跟不上业务演进的速度,添加新功能速度越来越慢,影响范围越来越大,有种加不动,不敢加的境遇。那这时候我们就需要重构当前的代码,使之获得面向当前业务的扩展性。
有的同学可能有疑虑了,我们的代码在设计时,不是已经是可扩展的了吗,怎么还要重构?
确实,我们的代码已经具有一定的可扩展性了,可以支持一定的业务演化。但是,同学别忘了,业务的变化速度往往会超过我们的预期。而且,我们在设计代码时,不会去果度设计,我们要有演化思维,不需要一次就把所有情况都覆盖到,那样是不可能的,也不现实。所以代码重构是避免不了的。
如何重构
讲完了为什么要重构,接下来就要说说如何重构了。
重构,改善既有代码的设计。
我们知道要写出好的代码需要遵守设计原则,设计原则是程序员写出好代码的内容心法。那只有内功心法行不行呢?看看《倚天屠龙记》里的张无忌,初期身怀九阳神功,内力深厚,但和别人过招,总吃亏,一句话,无打法。软件中的打法是什么呢,模式啊!设计模式,这个站在C位的靓仔,要好好发挥它的功能了。
设计模式:
每种设计模式都是一种通用问题的解决方案。这种问题在我们的环境中,反复出现
设计模式是一种可重复使用的解决方案
设计模式的四组成要素:
模式的名称
待解问题
解决方案
结论
设计模式按照功能划分:
创建型
工厂方法模式
抽象工厂模式
建造者模式
原型模式
单例模式
结构型
适配器模式
装饰器模式
代理模式
外观模式
桥接模式
组合模式
享元模式
行为型
模版方法模式
策略模式
观察者模式
迭代器模式
责任链模式
命令模式
备忘录模式
状态模式
访问者模式
中介模式
解释器模式
还有一些新增不属于三大类的,如并发模式。
这么多模式,我们如何使用呢?
有些软件要求应用中只有一个实例,如打印机这种,这时,单例模式就可以派上用场了。
对于像树形结构这种,节点分两种,有子节点的与没有子节点的(又名叶子节点),可以采用组合的方式,实现结构。
对于具体算法不明确的,可以采用策略模式。编程时,依赖接口;运行时,依赖具体实现。
如我们熟知的JUnit单侧框架,TestCase类中的runBare方法用到了模版方法模式,TestCase和TestSuite形成了组合模式,TestSetup和RepeatedTest都实现了TestDecorator,形成了类似于jdk中输入输出流的装饰者模式。
重构后好处
代码重构之后,添加新功能更简单,代码更易读懂和维护,代码更健壮。
所以,学习设计模式吧后浪。
用模式武装起来的程序员,都是架构师!
评论