Android 模板方法模式

Android 23种设计模式

前言

模板方法模式是一种我们十分常见的模式,比如我们都知道android中,Activity的生命周期,它都是固定的执行顺序。当然还有Fragment,AsynTask等等,我们使用这些类的时候,它都有一个固定执行顺序。而他们都是用了模板方法模式。我们自己多用于多个子类有公有方法的时候还有我们重构代码的时候。把相同的代码抽取到父类中。模板方法模式其实就是抽象类的一个使用

模板方法模式定义

定义一个框架,框架中所有方法按顺序执行。使得子类不改变父类结构。有序的执行这些方法。

举例

例子很简单,能一目了然的让我们知道什么就是模板方法模式。
1、抽象了一个工作的例子

public abstract class Work {
    public Work() {
        goToWork();
        goOffWork();
        sleep();
    }

    public abstract void goToWork();

    public abstract void work();

    public abstract void goOffWork();

    public abstract void sleep();
}

新时代的我们就是这样,两点一线上下班。我抽象了四个方法,上班,工作,下班,睡觉。
2、实现具体的类

public class XiaoMing extends Work {
    static final String TAG = XiaoMing.class.getSimpleName();

    @Override
    public void goToWork() {
        Log.d(TAG,"早上7点,去公安局上班");
    }

    @Override
    public void work() {
        Log.d(TAG,"处理案件");
    }

    @Override
    public void goOffWork() {
        Log.d(TAG,"下午6点,下班");
    }

    @Override
    public void sleep() {
        Log.d(TAG,"晚上10点,睡觉");
    }
}

public class XiaoDong extends Work{
    static final String TAG = XiaoDong.class.getSimpleName();

    @Override
    public void goToWork() {
        Log.d(TAG,"早上8点,去图书馆上班");
    }

    @Override
    public void work() {
        Log.d(TAG,"整理图书");
    }

    @Override
    public void goOffWork() {
        Log.d(TAG,"下午6点,下班");
    }

    @Override
    public void sleep() {
        Log.d(TAG,"晚上10点,睡觉");
    }
}

我们可以清楚的看到,代码执行的流程都一样,根据模板来。goToWork-work-goOffWork-sleep这样一个顺序,子类无需改变这种架构,而可以实现自己的功能。
3、调用

XiaoMing xiaoMing = new XiaoMing();
XiaoDong xiaoDong = new XiaoDong();

输出如下:

12-03 10:13:36.267 28154-28154/com.yink.designpattern.designpattern D/XiaoMing: 早上7点,去公安局上班
12-03 10:13:36.267 28154-28154/com.yink.designpattern.designpattern D/XiaoMing: 下午6点,下班
12-03 10:13:36.267 28154-28154/com.yink.designpattern.designpattern D/XiaoMing: 晚上10点,睡觉
12-03 10:13:36.267 28154-28154/com.yink.designpattern.designpattern D/XiaoDong: 早上8点,去图书馆上班
12-03 10:13:36.267 28154-28154/com.yink.designpattern.designpattern D/XiaoDong: 下午6点,下班
12-03 10:13:36.267 28154-28154/com.yink.designpattern.designpattern D/XiaoDong: 晚上10点,睡觉

模板方法模式小结

模板方法模式很简单,就是利用抽象类把流程梳理出来模板化。其实我们平时的使用过程中已经看到过很多很多这种用法了,只是没有一个心中的概念。现在知道了模板方法模式过后,即可反应就是,哦,这就是模板方法模式。有兴趣的同学可以去看看AysnTask,Activity等等的源码喔。

结束语

模板方法模式总结来就是流程封装。能让子类定制部分或者所有流程。父类提取共有代码,提升代码复用率,带来更好的可扩展性。
优点:封装不可变,扩展可变代码。提取公共代码便于维护
缺点:增加代码阅读难度。有的时候变得不好理解。

你可能感兴趣的:(Android 模板方法模式)