那你讲一下怎么使用模板模式重构代码的

听说你熟悉设计模式?你是怎么用模板模式重构的?

模板模式定义

先放一下模板模式的定义。

一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。

可能你看完是这样的

image.png

别慌,让我来解释一下。

用我自己的话来说就是,父类抽象类定义了具体的执行流程,其中某个或者多个是asbtrast抽象方法,让子类自己去重写达到具体不同的逻辑。

image.png

上代码

这是我之前一个项目里面模板模式的一个应用,当时用来重构代码时复用播放器的初始逻辑的,突然间翻到了,就想记录分享一波。

因为是公司代码不方便将源代码贴上了,我就重新写了几个类把那段代码重新还原一下,比单纯让你背概念的文章好理解很多,看完应该没有不会的吧。

image.png

简单介绍一下当时的情况,就是项目里面有两个播放页面,一个直播页面,一个录播页面,同样用到一个叫videoPlayer的类,但是两个又有不同的初始化逻辑,于是乎第一版就是由各个页面自己初始化。

1.0原始代码

image.png

image.png 很简单的两个类,当时的问题就是一大堆相同的设置是重复的,又有一些不一样的,那怎么能重构封装一下呢?

上设计模式

2.0重构代码

整一个player的父类,把player推出去,由父类来初始化,使用模板模式隔离其中的差异部分。

image.png initPlayOption抽象方法承担了差异部分代码的具体实现。

具体的子类,继承父类,重写initPlayOption即可以完成差异化处理 image.png

image.png

完了模板模式就这么简单,当然这里是只有一个initPlayOption是最简单的情况,也可以有多个类似的抽象方法。

拓展

有多个类似的抽象方法,典型的是Android里面,Activity的onCreate,onStart等生命周期方法就是模板模式的应用。

总结

模板模式就是把差异部分的代码作为抽象方法,父类定义好执行顺序,子类重写即可完成差异化的流程。

我个人看法就是设计模式靠背定义没什么用,需要在项目中应用上,像我之前在项目上应用过,一旦别人问我,我只需要想起当时应用场景就可以复述出来了,记住一个自己的应用场景就算掌握了,避免背定义。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值