模板方法模式
模板方法模式
一、简介
对于一个算法所需的关键步骤确定了顺序后,各个步骤的具体实现是未知的,如果遇到这类问题那么就可以采用模板方法模式解决。
定义:定义一个操作中的算法的框架而将一些步骤延迟到子类中,使子类可以不改变一个算法的结构即可冲定义该算法的某些特定步骤。
二、使用场景
- 多个子类公有的方法并且逻辑基本相同时
- 重要、复杂的算法,可以把核心算法设计为模板方法,周边的相关细节功能则由各个子类实现
- 重构时,模板方法模式可以把相同的代码抽取到父类中,然后通过钩子函数约束其行为
三、简单实现
这里以把大象放入冰箱为例来实现模板方法,我们知道把大象放入冰箱需要三步,三步顺序是固定的但是每一步具体实现是可变的,比如放入冰箱的可以是大象也可以是小象
//抽象模板类
public abstract class AbstractTemplate{
protected void openfridgedoor(){
Log.i(TAG, "openfridgedoor: 打开冰箱门");
}
protected void putElephant(){
Log.i(TAG, "putElephant: 放入大象");
}
protected void closefridgedoor(){
Log.i(TAG, "closefridgedoor: 关闭冰箱门");
}
public final void start(){
openfridgedoor();
putElephant();
closefridgedoor();
Log.i(TAG, "start: suc");
}
}
//具体实现类
public class SmallElephant extends AbstractTemplate{
@Override
protected void putElephant() {
Log.i(TAG, "putElephant: 放入小象");
}
}
public void Test(){
SmallElephant smallElephant=new SmallElephant();
smallElephant.start();
}
四、小结
Android中模板方法的应用可以参考AsyncTask或Activity声明周期函数。总结来说模板方法模式就是对流程的封装,即把某些固定流程封装到一个final函数中并让子类能够定制该流程中的步骤的实现。
- 优点
封装不变部分,扩展可变部分,提取公共代码便于维护
- 缺点
该模式会带来代码阅读难度会让用户觉得难以理解