爱好学习 发表于 2018-11-16 10:37

设计模式15 模板方法模式

本帖最后由 wushaominkk 于 2018-11-18 15:21 编辑

非原创,转载于我朋友小菜鸟学Android,

设计模式15 模板方法模式

定义
关于怎么固定算法骨架。
简单举例
测试结果

定义

在一个方法中定义一个算法的骨架,而将一些步凑延迟到子类中去。模板方法可以使的子类在不改变算法结构的情况下,重新定义算法中的某些步骤。

关于怎么固定算法骨架。

将一定步骤的方法,按固定顺序排列,子类又不能修改,那就将方法排序调用后,用final修饰固定的方法。

简单举例

比如做一件事情,需要4个步骤,而这四个步骤又是有先后顺序的,我们为了不然子类去改变这个步凑,将4步封装起来。4个步骤的方法,用protected修饰。

封装模板基类
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 相关

Luffy_Plus 发表于 2018-11-16 10:44

pikachu888 发表于 2018-11-16 11:34

设计模式无形中经常使用到~

1358582642 发表于 2018-11-16 21:03

我也是一个热爱学习的人

Nothingsilky 发表于 2018-11-17 09:23

感谢分享

wushaominkk 发表于 2018-11-18 15:22

主题注意代码插入规范,已帮你编辑好,下次注意
【公告】发帖代码插入教程
https://www.52pojie.cn/thread-713042-1-1.html

页: [1]
查看完整版本: 设计模式15 模板方法模式