TemplateMethod是指在抽象类或者接口中定义一系列操作的框架,而将具体的操作交给子类来实现,使得子类可以在不改变框架的结构下可重定义框架的具体步骤细节。比如Runnable接口中的run方法就可以看成是一种模板方法,该方法定义了线程运行的框架,run中具体执行什么样的逻辑,交给子类来实现。下面以客户去银行办理业务为例介绍。
客户去银行办理业务通常由如下几个步骤:
(1)取号排队;
(2)办理业务;
(3)评价服务;
/**
* Created by leboop on 2020/5/24.
*/
public abstract class BankTemplate {
// 取号排队
public abstract void takeLineup();
// 办理业务
public abstract void handleBuss();
// 服务评价
public abstract void evaluateService();
//模板方法
public void process() {
takeLineup();
handleBuss();
evaluateService();
}
}
/**
* Created by leboop on 2020/5/24.
*/
public class Deposit extends BankTemplate {
@Override
public void takeLineup() {
System.out.println("个人业务取号排队");
}
@Override
public void handleBuss() {
System.out.println("存款1000万!");
}
@Override
public void evaluateService() {
System.out.println("服务 very good!");
}
}
客户端代码如下:
/**
* Created by leboop on 2020/5/24.
*/
public class TemplateMain {
public static void main(String[] args) {
BankTemplate deposit= new Deposit();
deposit.process();
}
}
输出结果如下:
个人业务取号排队
存款1000万!
服务 very good!
现在有客户过来办理取款业务,
/**
* Created by leboop on 2020/5/24.
*/
public class Withdrawal extends BankTemplate{
@Override
public void takeLineup() {
System.out.println("取个人取款业务号排队……");
}
@Override
public void handleBuss() {
System.out.println("取款1个亿!");
}
@Override
public void evaluateService() {
System.out.println("服务 very nice!");
}
}
客户端代码如下:
/**
* Created by leboop on 2020/5/24.
*/
public class TemplateMain {
public static void main(String[] args) {
BankTemplate withdrawal=new Withdrawal();
withdrawal.process();
}
}
输出结果:
取个人取款业务号排队……
取款1个亿!
服务 very nice!