一、应用场景
用于一些具体流程固定,但是其中的某一个/一些步骤内容有变动的情形。
如:去银行办理业务
分3个步骤:
模板方法定义了一个操作中的流程骨架,将某些步骤延迟到子类中实现。这样,子类可以在不改变算法结构的前提下重新定义该算法的某些特定步骤。
二、具体实现
- 实现要点
1. 定义一个abstract template类,在其中定义一个子类必须实现的abstract 方法,和一个固定的流程方法。
2. 子类extends template类,实现父类中的abstract方法。
- 代码实现
1.定义template类,规定固定流程和abstract方法。
public abstract class Template {
private Template template;
public void setTemplate(Template template){
this.template = template;
}
/**
* 定义抽象方法,子类中必须实现
*/
public abstract void doBusiness();
/**
* 定义固定流程,定义为final不让子类重写
*/
public final void process(){
System.out.println("取号");
this.doBusiness();
System.out.println("给工作人员打分");
}
}
2.子类实现父类中的abstract方法,完成具体工作。
/**
* 存钱
*/
public class SaveMoney extends Template {
@Override
public void doBusiness() {
System.out.println("我来存款500万。");
}
}
/**
* 办卡
*/
class ApplyCard extends Template{
@Override
public void doBusiness() {
System.out.println("我来办一张借记卡。");
}
}
测试类
public class ClientTest {
public static void main(String[] args) {
SaveMoney saveMoney = new SaveMoney();
saveMoney.process();
System.out.println("----------------");
ApplyCard applyCard = new ApplyCard();
applyCard.process();
}
}
测试结果