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!