每日Android源码设计模式之-14、模板方法模式

当一些执行的流程是固定的,但是执行的具体细节不一样,这时候就需要用到模板方法模式


定义:

定义一个操作中的算法的框架,而将一些步骤延迟到子类中实现,使得子类在不改变算法的结构的情况下,又能具体的定义某个算法实现的细节。


实现起来很简单,就是有一个父类,比如里面定义了stepOne()、stepTwo()、stepThree()等方法,然后有一个execute()方法(可以定义为final避免子类覆盖),execute里面按照需要的顺序调用了上面的这些方法。

而在子类中,如果某个方法比如stepTwo,不同的子类实现方式一样,我们在子类中去覆盖重写就好了。


例子:

有一个父类 AbstractComputer,开机方法startUp,里面按照顺序调用了powerOn、checkHardware、loadOS、login方法。

我们知道,个人计算机和军用计算机在checkHardware、loadOS、login方法具体实现的细节可能是不一样的。

我们创建两个子类CoderComputer和MilitaryComputer,然后覆盖具体方法。


Android源码用的模板方法模式

AsyncTask其实就是一个典型的模板方法,调用execute后,会一次执行onPreExecute、doInBackground、onPostExecute也可以通过onProgressUpdate来更新进度。

这几个方法的调用流程和进程的切换是Android源码中定义好了的,而这几个方法的具体实现需要用户自己去实现。


总结

优点:

封装了不变的部分,扩展可变部分

提取公共部分代码,便于维护

缺点:

可能带来代码阅读的难度,有些地方用户难于理解

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容