模板方法模式

模板方法模式:Template Method

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



这个模板方法就可以理解为我们高中的英语作文,我们一般都会储备一个范文,在真正考试写作文的时候,我们直接将背好的范文不变的那部分直接写上去。作文的主体内容部分,再根据作文的主题进行一个具体的修改。

我们在这里就是用了模板方法模式,背好的范文就是模板方法,契合主题部分的作文内容就是具体的子类。模板方法是一个十分简单的设计模式,我们可以尝试将它运用在我们的日常代码中。



这个设计模式你还可以理解为就是一个父类抽取了子类的公共操作,仅此而已,不要因为设计模式四个字把他想的高大上。



分享我最近写的一个模板方法模式:

小组四个人完成一个共同需求,我们一人负责一条业务流程,业务流程相对独立,但某些操作细节又是相同的。

其中一个场景是,我们需要将获取到的对象进行两个操作,一个是数据校验,一个是对象转换。

导师就是用了该设计模式在父类中定义了对应的执行流程——XXX.validationData().build()。然后我们具体的四个业务场景分别去实现该方法,重写具体校验数据和对象转换的细节。






如果你理解了前面的设计思路,代码理解起来也就很简单了


测试代码:

抽象类:定义方法模式

public abstract class AbstractClass {

  //定义的模板方法
  public void backHome() {
    System.out.println("[ 打卡下班回家 ]");
    doBackHome();
      ......
    System.out.println("[ 到家 ]");
  }

  //具体操作留给子类实现
  protected void doBackHome() {
    throw new RuntimeException("子类必须实现该方法");
  }
}



具体的子类

//子类一
public class ConcreteClass1 extends AbstractClass {
  @Override
  protected void doBackHome() {
    System.out.println("挤公交回家");
  }
}


//子类二
public class ConcreteClass2 extends AbstractClass {
  @Override
  protected void doBackHome() {
    System.out.println("骑自行车回家");
  }
}



测试类

public class TestTemplateClass {
  public static void main(String[] args) {

    //代码的编写应该面向接口编程,但我们这里为了演示方便,直接以创建一个抽象类为起点
    AbstractClass concrete = new ConcreteClass1();
    //调用结果为子类具体实现以后的
    concrete.backHome();

    System.out.println("========");
    AbstractClass concrete2 = new ConcreteClass2();
    //调用结果为子类具体实现以后的
    concrete2.backHome();
  }
}



测试结果

模板方法模式_第1张图片

你可能感兴趣的:(设计模式)