模板方法模式
Posted this.
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了模板方法模式相关的知识,希望对你有一定的参考价值。
有些时间没有更新技术博客了,上段时间都在忙考试。
这次继续学习新的设计模式————模板方法模式。依旧先从一个UML图开始:
其中:
AbsTmplate:定义了逻辑的框架
ConcreteImplA:具体实现A
ConcreteImplB:具体实现B
举个例子,现有几部电脑,每部电脑的操作系统不相同,但是每部电脑的开机流程都相同。比如打开电源,装载系统,登录系统。
首先,就需要抽象出一个电脑类:
//抽象类,定义了一组行为
public class AbsComputer
protected void powerOn()
System.out.println("打开电源");
protected void loadOs()
System.out.println("加载操作系统");
protected void login()
System.out.println("无需输入密码,直接登录");
//final修饰,子类不能修改运行的逻辑
public final void start()
//开机的固定流程,相当于执行一套模板
powerOn();
loadOs();
login();
现有两部电脑,一部装载了Windows系统,另一部是Linux系统:
public class LinuxComputer extends AbsComputer
@Override
protected void loadOs()
System.out.println("加载Ubuntu系统");
@Override
protected void login()
System.out.println("输入密码登录系统");
public class WinComputer extends AbsComputer
@Override
protected void loadOs()
System.out.println("加载windows系统");
@Override
protected void login()
System.out.println("输入密码登录系统");
通过一个测试类让电脑按照模板来执行:
public class Test
public static void main(String[] args)
AbsComputer winPc = new WinComputer();
winPc.start();
System.out.println("\\n" + "-------------------");
AbsComputer linuxPc = new LinuxComputer();
linuxPc.start();
执行结果:
打开电源
加载windows系统
输入密码登录系统
打开电源
加载Ubuntu系统
输入密码登录系统
从上可知,模板方法模式是对逻辑流程的一个封装,将共有的方法集中在父类,能够提高程序的扩展性。
android中的应用
在Android中,AsyncTask是用模板方式实现的架构之一。在用其执行异步任务时,一定需要通过执行其execute方法才能开始。在任务开始时,会先后执行onPreExecute(),doInBackgroud(),onPostExecute()方法,而里面的每个方法的实现是需要开发者自己去定义,就如上述装载系统一样。关于AsyncTask的实现,参考http://scauq.cn/2016/05/01/%E6%B7%B1%E5%85%A5%E6%8E%A2%E7%B4%A2AsyncTask/
另外,Activity的生命周期也是通过模板方式实现的。通过onCreate(), onStart(), onResume(), onPause(), onStop(), onDestroy()等方法形成一个模板,每个Activity只需要关心如何实现模板中的各个方法即可。
以上是关于模板方法模式的主要内容,如果未能解决你的问题,请参考以下文章