模板方法模式

描述

场景:
某个函数有一个固定的流程,流程按一定的步骤进行;但这些步骤的具体实现不确定,或者说可以被修改。

例如“银行办理业务”,分为“取号”、“排队”、“办理业务”、“评价服务”几个步骤。其中“取号”可以“现场取”、“手机取”;“办理业务”可以是“取款”、“存款”等等。

做法:
同样拿银行办理业务作例子。
定义一个抽象类,其中runBusiness定义了办理业务的固定流程,其余四个方法由子类去实现。

代码实现示例

定义一个抽象类,其中runBusiness定义了办理业务的固定流程,其余四个方法由子类去实现。

public abstract class BussinessTemplate{
  /**办理业务的抽象流程**/
  public void runBusiness(){
      getNum();
      inQueue();
      doBusiness();
      judgeService();
  }
  /**下面的步骤因为不固定,因此定义为抽象方法。
  若步骤是明确且固定不变的,则可直接在此实现,不用定义为抽象方法。**/
  /**取号**/
  protected abstract void getNum();
  /**排队**/
  protected abstract void inQueue();
  /**办理业务**/
  protected abstract void doBusiness();
  /**评价服务**/
  protected abstract void judgeService();
}

若要写一个“存款”的流程,则只需继承上面这个BussinessTemplate抽象类,并实现里面的抽象方法即可。

实际应用场景

FAQ

Last Updated:
Contributors: dongyz8