听说你熟悉设计模式?你是怎么用模板模式重构的?
模板模式定义
先放一下模板模式的定义。
一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。
可能你看完是这样的
别慌,让我来解释一下。
用我自己的话来说就是,父类抽象类定义了具体的执行流程,其中某个或者多个是asbtrast抽象方法,让子类自己去重写达到具体不同的逻辑。
上代码
这是我之前一个项目里面模板模式的一个应用,当时用来重构代码时复用播放器的初始逻辑的,突然间翻到了,就想记录分享一波。
因为是公司代码不方便将源代码贴上了,我就重新写了几个类把那段代码重新还原一下,比单纯让你背概念的文章好理解很多,看完应该没有不会的吧。
简单介绍一下当时的情况,就是项目里面有两个播放页面,一个直播页面,一个录播页面,同样用到一个叫videoPlayer的类,但是两个又有不同的初始化逻辑,于是乎第一版就是由各个页面自己初始化。
1.0原始代码
很简单的两个类,当时的问题就是一大堆相同的设置是重复的,又有一些不一样的,那怎么能重构封装一下呢?
上设计模式
2.0重构代码
整一个player的父类,把player推出去,由父类来初始化,使用模板模式隔离其中的差异部分。
initPlayOption抽象方法承担了差异部分代码的具体实现。
具体的子类,继承父类,重写initPlayOption即可以完成差异化处理
完了模板模式就这么简单,当然这里是只有一个initPlayOption是最简单的情况,也可以有多个类似的抽象方法。
拓展
有多个类似的抽象方法,典型的是Android里面,Activity的onCreate,onStart等生命周期方法就是模板模式的应用。
总结
模板模式就是把差异部分的代码作为抽象方法,父类定义好执行顺序,子类重写即可完成差异化的流程。
我个人看法就是设计模式靠背定义没什么用,需要在项目中应用上,像我之前在项目上应用过,一旦别人问我,我只需要想起当时应用场景就可以复述出来了,记住一个自己的应用场景就算掌握了,避免背定义。