設計模式——模板模式
模板模式
1、基本介紹
- 模板方法模式,又叫模板模式,在一個抽象類公開定義了執行它的方法模板,它的子類可以按照需求重寫方法,但呼叫將以抽象類中定義的方式進行
- 模板方法模式定義一個操作中的演算法的骨架,而將一些步驟延遲到子類中,使得子類可以不改變一個演算法的介面,就可以重定義該演算法的某些步驟。
2、程式碼
public abstract class SoyaMilk {
//模板方法,make,模板方法為final,不允許子類覆蓋
final void make() {
select();
addCondiments();
soak();
beat();
}
//選擇材料
void select() {
System.out.println("第一步:選擇好新鮮的黃豆");
}
//新增不同的配料,抽象方法
abstract void addCondiments();
//浸泡
void soak() {
System.out.println("第三步,黃豆和配料開始浸泡");
}
void beat() {
System.out.println("第四步,打豆漿");
}
}
public class RedBeanSoyaMilk extends SoyaMilk {
@Override
void addCondiments() {
System.out.println("加入上好的紅豆");
}
}
public class PeanutSoyaMilk extends SoyaMilk {
@Override
void addCondiments() {
System.out.println("加入上好的花生");
}
}
public class Client {
public static void main(String[] args) {
//製作紅豆豆漿
System.out.println("-------製作紅豆豆漿------");
SoyaMilk redBeanSoyaMilk = new RedBeanSoyaMilk();
redBeanSoyaMilk.make();
System.out.println("-------製作花生豆漿------");
SoyaMilk peanutSoyaMilk = new PeanutSoyaMilk();
peanutSoyaMilk.make();
}
}
3、模板模式的鉤子方法
- 在模板模式的父類中,可以定義一個方法,預設不做任何事,子類可以視情況要不要覆蓋他,稱為鉤子
final void make() {
select();
if(customerWant())
addCondiments();
soak();
beat();
}
//鉤子方法,決定是否需要新增配料
boolean customerWant() {
return true;
}
public class PureSoyaMilk extends SoyaMilk {
@Override
void addCondiments() {
}
@Override
boolean customerWant() {
return false;//重寫鉤子方法使得模板方法不使用
}
}
4、模板模式的特點
1)基本思想是:演算法只存在於一個地方,也就是父類中,容易修改。需要修改演算法時,只要修改父類的模板方法中的某些已經實現的某些步驟,子類就會繼承這些修改。
2)一般模板方法都加上final關鍵字,防止子類重寫模板方法。
3)使用場景: 要完成的一系列事情,這些事情步驟大致相同,只有一些不同時,可用模板方法。
4)優點: 既統一了演算法,也提供了很大的靈活性。父類的模板方法確保了演算法的結構保持不變,同時由子類提供部分步驟的實現。
5)缺點: 每個不同的實現類都需要一個子類實現,導致類的個數的增加,使系統更加龐大。
相關文章
- 設計模式-模板模式設計模式
- 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設計模式
- 設計模式之模板方法模式(三分鐘學會一個設計模式)設計模式