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等等的源码喔。

结束语

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 将上周跑的裂变数据和复盘,梳理做的好的做的不好的部分,以及可以优化的点 做得好的:每一个步骤都自己重复试了好几遍,...
    小丸子呀_阅读 236评论 1 0
  • 2月20周一 每个单位都会有这样的同事b吧,如果是别人的事情,总是要嘴贱的来一句“有那么难吗?多大点事啊” 结果真...
    鹌鹑也是鸟好吗阅读 507评论 0 1
  • 不知道什么时候,我想用一个成年人的眼光来看一些事情。 小的时候,常常陪在父母身边,看着老爸老妈们在凌晨五点多时候,...
    柠檬不争阅读 322评论 7 9
  • 目标:儿女健康成长,快乐学习 1.护生群,每日一善群随喜 2.外甥喜得千金,发红包祝福 3.感恩姚老师的分享,每次...
    幸运的莲华阅读 108评论 0 0