设计模式 - 模板方法模式(设计模式介绍系列)(四)

156 阅读3分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第27天,点击查看活动详情

设计模式分为三类:创建型、结构型、行为型。

我们都知道,设计模式的基础是是Java 的多态。

设计模式的基本法则是: 高内聚 ,低耦合。(各个类之间保持模块性)

设计模式的六个原则:单一职责原则、开放封闭原则、里式替换原则、接口隔离原则、依赖倒置原则、迪米特法则。

上面说的是一些设计模式的基本知识点,这篇文章我们来介绍一下模板方法模式。

模板方法模式基本概念

模板方法模式属于行为型 设计模式。

模板方法模式其实理解起来比较简单,在日常工作中使用到的也比较多。

按照名字来理解,其实就相当于定义一个“模板”,子类继承(或者实现)这个模板,按照模板的规定和流程来实例化自定义的功能细节。

也就是说,模板方法模式相当于一个框架,将一些步骤的具体实现延迟到子类中,使得子类可以不改变已有代码执行的结构即可重定义该执行流程中的某些特定步骤细节。

模板方法模式类图

参照类图和后续的代码,更利于我们放到理解。模板方法用类图表示:

image.png

示例代码

首先假设一个应用场景,我们到4s 办事情,不论什么品牌的店办理什么事情,大体的流程分为如下三个步骤:

  • 电话预约
  • 到店办事
  • 结账走人

对于电话预约和结账的操作,不论是做什么事情,都是必不可少的,同时不论斑是什么事情,这两个步骤的逻辑也几乎都相同。

而我们要处理的事情就可能有很多了,比如说购买新车、给车辆做保养、车辆维修、车辆置换等等。

所以我们将公共的步骤(预约、结账)的实现放在父类,然后子类继承这个父类,去实现不用的事情的处理细节。

定义4s 店业务抽象类,其中execute 方法负责执行所有步骤,抽象类中同时定义了各个步骤的具体方法。通用方法直接在抽象类中实现,而业务方法需要各个子类进行实现。可见性描述可以根据不同的业务场景设置为private 或者protected 或者public

public abstract class BusinessIn4S {
  public void execute() {
    phoneAppointment();
    doBusiness();
    pay();
  }

  private void phoneAppointment() {
    System.out.println("预约");
  }

  abstract protected void doBusiness();

  private void pay() {
    System.out.println("付款");
  }
}

实现类:

public class BusinessIn4SForMaintain extends BusinessIn4S{
  @Override
  protected void doBusiness() {
    System.out.println("买车");
  }
}

调用:

public static void main(String[] args) {
  BusinessIn4SForMaintain business = new BusinessIn4SForMaintain();
  business.execute();
}

运行结果:

预约
买车
付款

总结

以上例子很简单,却也很实际,很明显。我们一眼就可以参透模板方法模式的运行流程。

模板方法模式的工作流程是定义一个业务执行流程的大纲,而由其子类定义其中某些步骤的内容。

模板方法模式对代码执行流程有更多的控制权,针对通用的部分不会有重复的代码。

模板方法模式不会依赖任何对象,整个执行流程自己搞定。

以上就是关于模板方法模式的介绍。