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

设计模式 - 模板方法模式

作者: 小菜_charry | 来源:发表于2017-10-25 19:20 被阅读7次

    1. 定义

    模板方法模式(Template Method Pattern):

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

    定义一个操作中的算法的框架, 而将一些步骤延迟到子类中。 使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

    2. 个人理解及使用场景

    在Android中,我们通常使用会定义 BaseActivity,其实这个就是模板方法模式:

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(getContentView());
        initWidget();
        initData();
        initListener();
    }
    

    理解为什么这么写:
    父类中定义的一些抽象方法,子类必须实现(getContentView/initWidget/initData/initListener).
    他们的执行顺序是固定的(不能还没初始化控件就使用控件进行设置监听).
    这个固定流程在我们写的activity中都是适用,换句话说如果我们不继承BaseActivity,我们一样会这么写.也就是重复的代码进行抽取.

    总结:

      1. 流程固定,所以进行抽取.
      1. 行为由父类控制,子类来具体实现.

    3. 扩展模板方法模式

    场景比如:大多数的activity都需要一个统一样式的标题,我们可以写到BaseActivity中,

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(getContentView());
        initWidget();
        if(setTitle() !=null ){
            ((TextView)findViewById(R.id.tv_title)).setText(setTitle());
        }
        initData();
        initListener();
    }
    
    protect String setTitle(){
        return null;
    }
    

    默认是不显示标题的,只有子类重写了 setTitle 方法并返回了值才会设置标题.setTitle() 也叫做钩子方法(Hook Method).

    一些名词解释:

    • 基本方法 :基本方法也叫做基本操作,是由子类实现的方法,并且在模板方法被调用(例如 getContentView/initWidget/initData/initListener)
    • 模板方法 :可以有一个或几个,一般是一个具体方法,也就是一个框架,实现对基本方法的调度,完成固定的逻辑(例如上面的onCreate方法)。

    模板方法模式比较常见,我们每天都写,就不另外贴例子和代码了.

    相关文章

      网友评论

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

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