美文网首页
Android 进阶-设计模式-模板方法模式

Android 进阶-设计模式-模板方法模式

作者: 伊泽瑞额 | 来源:发表于2019-11-04 11:02 被阅读0次
定义:

定义一个算法的骨架,将骨架中的特定步骤延迟到子类中。模板方法模式使得子类可以不改变算法的结构即可重新定义该算法的某些特定步骤
通俗得讲就是 : 讲公共得方法给抽取出来作为基类,按特定步骤执行,然后由子类去实现

使用场景:

1.多个子类有共有的方法,并且逻辑基本相同
2.重要、复杂的算法,可以把核心算法设计为模板方法,周边的相关细节功能则由各个子类实现
3.重构时,模板方法是一个经常使用的方法,把相同的代码抽取到父类中,然后通过构造函数或者提供一个钩子方法约束其行为。

模板方法得代码实现:

例子1:AsyncTask类、activity中的onCreate() 等生命周期
例子2:Android中View的draw方法
代码例子:

package com.amn.amn.testdemo;

import android.app.Activity;

public  abstract class BaseActivity extends Activity {


    /**
     * 基本方法 获取控件Id
     */
    protected  abstract void findViewId();

    /**
     * 基本方法 获取传过来的数据
     */
    protected abstract  void getIntentData();

    /**
     * 基本方法  设置监听
     */

    protected abstract void setEvent();

    /**
     * 模板方法
     */

    /**
     * 模板方法  按这三个方法统一的调用顺序
     */
    final public void init() {
       getIntentData();
       findViewId();
       setEvent();
    }
}


子类只要继承就行了,但是如果并不是所有的 Activity 都有其他 Activity 传递数据过来的,因此 getIntentData()这个方法不一定所有子类都要调用。这个时候我们可以提供一个钩子方法
    /**
     * 模板方法  按这三个方法统一的调用顺序
     */
    final public void init() {
        if(isGetIntentData()){
            getIntentData();
        }

       findViewId();
       setEvent();
    }


    final protected boolean isGetIntentData(){
        return true;
    }

相关文章

网友评论

      本文标题:Android 进阶-设计模式-模板方法模式

      本文链接:https://www.haomeiwen.com/subject/gsaufctx.html