在某些程序执行过程中,整体流程是固定的,只是说某一个小过程不同,模板方法模式设计理念就是将这些固定的程序抽取到一个父类中,将那个不同的过程方法定义为抽象方法,交由子类去重写实现。然后父类定义一套固定的流程去调用即可。
像Servlet中请求有doGet和doPost两种,方法中可以有多种请求处理,这是靠我们自己去实现的。但是父类里面有一套自己的执行流程,到service()方法里面会判断是哪种请求方式,然后去调用我们实现好的方法。这种也是模板方法模式。
子类去调用父类的那个固定流程方法,由于多态,所以会去执行子类重写后的小过程方法。
模板方法模式的缺点就是小过程方法的不同实现方式,就相应必须扩展多个子类去重写,但也符合开闭原则。
//父类
public abstract class AbstractBank {
//办理业务方法 -- 模板方法
public void handle(){
this.offerNumber();
this.lineup();
this.business();
this.score();
}
//抽号
public void offerNumber(){
System.out.println("抽号");
}
//排队
public void lineup(){
System.out.println("排队");
}
//办理具体业务--抽象方法,由具体子类实现
public abstract void business();
//评分
public void score(){
System.out.println("评分");
}
}
/*
存钱业务
*/
public class StoreBusiness extends AbstractBank{
//办理的具体业务
public void business() {
System.out.println("我要存钱");
}
}
/*
转账业务类
*/
public class TransferBusiness extends AbstractBank{
//转账
public void business() {
System.out.println("我要转账");
}
}
public class Test {
public static void main(String[] args) {
StoreBusiness storeBusiness = new StoreBusiness();
storeBusiness.handle();
System.out.println("===================================");
TransferBusiness transferBusiness = new TransferBusiness();
transferBusiness.handle();
}
}