设计模式 - 模板方法模式

2017-10-25  本文已影响7人  小菜_charry

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,我们一样会这么写.也就是重复的代码进行抽取.

总结:

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).

一些名词解释:

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

上一篇下一篇

猜你喜欢

热点阅读