模闆方法
定義一個操作中的算法骨架,而将算法的一些步驟延遲到子類中,使得子類可以不改變該算法結構的情況下重定義該算法的某些特定步驟。
模闆方法包含以下角色:
- 抽象類:負責給出一個算法的輪廓和骨架
- 模闆方法包含了具體邏輯順序
- 基本方法包含了抽象方法以及具體方法
- 具體子類:實作抽象類中所定義的方法,它們是一個頂級邏輯的組成步驟。
具體實作
例如去銀行辦理業務,需要取号、排隊、辦理具體業務等流程,其中取号、排隊是必須經過的流程順序,辦理具體業務是抽象的,因人而異
1.建立抽象類
Bank
public abstract class Bank {
//辦理抽象業務
public abstract void Onbusiness();
//模闆方法包含具體順序邏輯
public void TemplateMethod()
{
//第一步:取号
Getnumber();
//第二步:排隊
lineup();
//第三步:辦理具體業務
Onbusiness();
}
public void Getnumber(){
System.out.println("先取号");
}
public void lineup()
{
System.out.println("再排隊");
}
}
2.建立具體業務類實作接口
//基金業務
public class FundBusiness extends Bank{
@Override
public void Onbusiness() {
System.out.println("辦理基金業務");
}
}
//存款業務
public class DepositBusiness extends Bank{
@Override
public void Onbusiness() {
System.out.println("辦理存款業務");
}
}
3.用戶端實作
public static void main(String[] args) {
DepositBusiness depositBusiness=new DepositBusiness();
depositBusiness.TemplateMethod();
System.out.println("--------------------------");
FundBusiness fundBusiness=new FundBusiness();
fundBusiness.TemplateMethod();
}
優點:模闆模式提高了代碼的複用性,把不變的行為放在父類中,而将不同的代碼放入不同的子類中
缺點:對每個不同的實作都需要定義一個子類去實作接口,這會導緻類的個數增加,系統更加龐大,設計也更加抽象
适用場景:
- 算法的整體步驟很固定,但其中個别部分易變時,這時候可以使用模闆方法模式,将容易變的部分抽象出來,供子類實作。
- 需要通過子類來決定父類算法中某個步驟是否執行,實作子類對父類的反向控制