一、應用場景
用於一些具體流程固定,但是其中的某一個/一些步驟內容有變動的情形。
如:去銀行辦理業務
分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();
}
}
測試結果