Android 设计模式入门到精通之十五:模板方法模式(Template Method)

模板方法模式(Template Method)

1. 概念

Define the skeleton of an algorithm in an operation, deferring some steps to subclasses. Template Method lets subclasses define certain steps of an algorithm without changing the algorithm's structure. 

模板方法模式在一个方法中定义一个算法的骨架,而将一些步骤的实现延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中某些步骤的具体实现。

2. 应用场景 --比如Android AsyncTask.doInBackground() 

3. 代码实践

JDK: 

•java.io.InputStream, java.io.OutputStream, java.io.Reader和java.io.Writer的所有非抽象方法

•java.util.AbstractList, java.util.AbstractSet和java.util.AbstractMap的所有非抽象方法

•javax.servlet.http.HttpServlet#doXXX()

Android: (以TaskExecutor机制的Task为例

public abstract class Task<Params ,Result> implements Runnable {

    private final static String TAG = "Task";

    private long mId = 0;

    private Context mContext;

    private Task(Context context, long id){

        mContext = context;

        mId = id;

    }

    @Override

    public final void run() { //1. 算法骨架(模板方法)

        Result result = null;

        try {

            result = doInBackground();

            postComplete(result);

        } catch (Exception e) {

            postComplete(result);

        }

    }

    private void postComplete(final Result result){

        if(TaskExecutor.mUiHandler !=null){

            TaskExecutor.mUiHandler.post(new Runnable(){

                @Override

                public void run() {

                    onComplete(result);

                }

            });

        }

    }


    @WorkerThread

    protected abstract Result doInBackground(Params... params); //算法步骤1:执行后台耗时,延迟由子类实现

    @UiThread

    protected abstract void onComplete(Result result);//算法步骤2:通知UI刷新,延迟由子类实现

}

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

推荐阅读更多精彩内容

  • 自己备忘,随便写 android网络框架源码解析及对比 android常用网络框架对比 Volley: 特点 基于...
    幻海流心阅读 1,522评论 0 4
  • 设计模式分类 总体来说设计模式分为三大类:创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原...
    lifeline丿毅阅读 1,245评论 0 2
  • 面向对象的六大原则 单一职责原则 所谓职责是指类变化的原因。如果一个类有多于一个的动机被改变,那么这个类就具有多于...
    JxMY阅读 961评论 1 3
  • 一. Java基础部分.................................................
    wy_sure阅读 3,832评论 0 11
  • 由于中秋冷餐活动的劳累,导致羊水早破,提前一周破水入院! 9月18日凌晨4点50几羊水破,叫老公起床,指挥老公做简...
    f754ab152634阅读 407评论 0 1