本帖最后由 wushaominkk 于 2018-11-18 15:21 编辑
非原创,转载于我朋友小菜鸟学Android,
设计模式15 模板方法模式
定义
关于怎么固定算法骨架。
简单举例
测试结果
定义
在一个方法中定义一个算法的骨架,而将一些步凑延迟到子类中去。模板方法可以使的子类在不改变算法结构的情况下,重新定义算法中的某些步骤。
关于怎么固定算法骨架。
将一定步骤的方法,按固定顺序排列,子类又不能修改,那就将方法排序调用后,用final修饰固定的方法。
简单举例
比如做一件事情,需要4个步骤,而这四个步骤又是有先后顺序的,我们为了不然子类去改变这个步凑,将4步封装起来。4个步骤的方法,用protected修饰。
[Java] 纯文本查看 复制代码 封装模板基类
public abstract class AbstractTemplate {
/**
* 固定模板,使用final
*/
public final void templateMethod(){
stepFirst();
stepSecond();
stepThird();
stepForth();
}
/**
* 第一步,子类有不同的实现, 需要子类实现
*/
protected abstract void stepFirst();
/**
* 第2步,子类有不同的实现
*/
protected abstract void stepSecond();
/**
* 第3步
*/
protected void stepThird(){
System.out.println("默认第3步");
}
/**
* 第4步,子类也可以修改,不过有个默认的执行
*/
protected void stepForth(){
// 默认执行
System.out.println("默认第4步");
}
}
具体的模板实现类1
public class Work extends AbstractTemplate {
@Override
protected void stepFirst() {
System.out.println("工作的第一步");
}
@Override
protected void stepSecond() {
System.out.println("工作的第二步");
}
}
具体的模板实现类2
public class OtherWork extends AbstractTemplate {
@Override
protected void stepFirst() {
System.out.println("另一工种的第一步");
}
@Override
protected void stepSecond() {
System.out.println("另一种工种的第2步");
}
@Override
protected void stepThird() {
System.out.println("另一种工种的第3步");
}
}
测试代码
public class Test {
public static void main(String[] args) {
Work work = new Work();
// 执行模板
work.templateMethod();
System.out.println(">>>>>>>>>>>>>>>>>>>>>>>");
OtherWork otherWork = new OtherWork();
otherWork.templateMethod();
}
}
测试结果
工作的第一步
工作的第二步
默认第3步
默认第4步
>>>>>>>>>>>>>>>>>>>>>>>
另一工种的第一步
另一种工种的第2步
另一种工种的第3步
默认第4步
Android 相关
|