設計模式-模板模式
設計模式-模板模式
基本介紹
- 模板方法模式(Template Method Pattern),又叫模板模式(Template Pattern),在一個抽象類公開定義了執行他的方法的模板。他的子類可以按需要重寫方法實現,但呼叫將以抽象類中定義的方式進行
- 簡單的說,模板方法模式定義一個操作中的演算法的骨架,而將一些步驟延遲到子類中,使得子類可以不改變一個演算法的結構,就可以重新定義該演算法的某些特定步驟
- 這種型別的設計模式屬於行為設計模式
模板方法模式的鉤子方法
在模板方法模式的父類中,我們可以定義一個方法,他預設不做任何事情,子類可以視情況要不要覆蓋它,該方法稱為“鉤子”
模板方法模式的注意事項和細節
- 基本思想是:演算法只存在於一個地方,也就是在父類中,容易修改。需要修改演算法時,只要修改父類的模板方法或者已實現的步驟,子類就會繼承這些修改
- 實現了最大化程式碼複用。父類的模板方法和已實現的某些步驟會被子類繼承而直接使用
- 既統一了演算法,也提供很大靈活性。父類的模板方法確保了演算法的結構保持不變,同時由子類提供步驟實現
- 改模式的不足之處:每一個不同的實現都需要一個子類實現,導致類個數增加,使得系統變得很龐大
- 一般模板方法上都加上final關鍵字,防止子類重新模板方法
- 模板方法使用場景:當要完成某個過程,該過程要執行一系列步驟,這一系列的步驟基本相同,但其個別步驟在實現時可能不同,通常考慮用模板方法模式處理
程式碼實現
以製作不同種類的豆漿為目的進行實現
//抽象類,表示豆漿
public abstract class SoyaMilk {
//模板方法,make,模板方法可以做成final不讓子類覆蓋
public final void make() {
select();
if (customerWantCondiments())
addCondiments();
sock();
beat();
}
//新增配料,子類具體實現
public abstract void addCondiments();
//鉤子方法,決定是否需要新增配料
public boolean customerWantCondiments() {
return true;
}
public void select() {
System.out.println("第一步:選擇好的黃豆");
}
public void sock() {
System.out.println("第三步:黃豆和配料開始浸泡");
}
public void beat() {
System.out.println("第四步:豆漿機打碎");
}
}
public class PeanutSoyaMilk extends SoyaMilk {
@Override
public void addCondiments() {
System.out.println("第二步,加入上好的花生");
}
}
public class PureSoyaMilk extends SoyaMilk {
@Override
public void addCondiments() {
//空實現
}
@Override
public boolean customerWantCondiments() {
return false;
}
}
public class RedBeanSoyaMilk extends SoyaMilk {
@Override
public void addCondiments() {
System.out.println("第二步,加入上好的紅豆");
}
}
//客戶端進行呼叫
public class Client {
public static void main(String[] args) {
new PureSoyaMilk().make();
}
}
相關文章
- 設計模式——模板模式設計模式
- Java設計模式——模板設計模式Java設計模式
- 設計模式-模板方法模式設計模式
- 模板設計模式設計模式
- python設計模式-模板方法模式Python設計模式
- js設計模式--模板方法模式JS設計模式
- 設計模式之----Java模板模式設計模式Java
- 設計模式之模板方法模式設計模式
- Java設計模式-模板方法模式Java設計模式
- 設計模式之【模板方法模式】設計模式
- Android原始碼設計模式-模板模式Android原始碼設計模式
- 《Head First 設計模式》:模板方法模式設計模式
- PHP設計模式之模板方法模式PHP設計模式
- 簡說設計模式——模板方法模式設計模式
- 極簡設計模式-模板方法模式設計模式
- 設計模式實戰-模板方法模式設計模式
- 模板方法設計模式設計模式
- java模板設計模式Java設計模式
- 23種設計模式(四)- 模板方法設計模式設計模式
- 設計模式快速學習(六)模板模式設計模式
- C#設計模式(14)——模板方法模式C#設計模式
- javascript設計模式 之 8 模板方法模式JavaScript設計模式
- Java描述設計模式(19):模板方法模式Java設計模式
- Java設計模式之(十三)——模板方法模式Java設計模式
- 13.java設計模式之模板模式Java設計模式
- 設計模式之模板方法設計模式
- Java設計模式之模板方法模式和建造者模式Java設計模式
- 折騰Java設計模式之模板方法模式Java設計模式
- 設計模式 | 模板方法模式及典型應用設計模式
- C#設計模式-模板方法模式(Template Method)C#設計模式
- Rust語言之GoF設計模式: 模板方法模式RustGo設計模式
- 原始碼中的設計模式--模板方法模式原始碼設計模式
- 設計模式(十四)——模板模式(SpringIOC原始碼分析)設計模式Spring原始碼
- 《設計模式七》備忘錄、模板方法、狀態模式及設計模式設計總結設計模式
- JAVA設計模式之模板方法Java設計模式
- 詳解模板方法設計模式設計模式
- Go 實現常用設計模式(七)模板方法模式Go設計模式
- 設計模式之模板方法模式(三分鐘學會一個設計模式)設計模式