模板方法模式

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只需要关心如何实现模板中的各个方法即可。

以上是关于模板方法模式的主要内容,如果未能解决你的问题,请参考以下文章

设计模式----模板方法模式

设计模式(十五)——模板方法模式

设计模式整理_模板模式

《Java设计模式》之模板方法模式

设计模式--15模板方法模式

一篇打通架构设计,Java设计模式9,模板方法模式