模板方法模式
描述
场景:
某个函数有一个固定的流程,流程按一定的步骤进行;但这些步骤的具体实现不确定,或者说可以被修改。
例如“银行办理业务”,分为“取号”、“排队”、“办理业务”、“评价服务”几个步骤。其中“取号”可以“现场取”、“手机取”;“办理业务”可以是“取款”、“存款”等等。
做法:
同样拿银行办理业务作例子。
定义一个抽象类,其中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抽象类,并实现里面的抽象方法即可。