一.模板方法模式:
在模板模式(template pattern)中,乙個抽象類公開定義了執行它的方法的方式/模板。它的子類可以按需要重寫方法實現,但呼叫將以抽象類中定義的方式進行。這種型別的設計模式屬於行為型模式。
在乙個方法中定義乙個演算法的骨架(演算法框架),而將一些步驟延遲到子類中。模板方法使得子類可以在不改變乙個演算法的結構的情況下,即可重新定義該演算法中的某些步驟
二.場景:
三.模式結構:
1.抽象模板:是乙個抽象類,它包含了乙個演算法骨架稱為模板方法;該演算法中每一步驟可以由抽象方(原語操作)與非抽象方法實現。抽象方法由其子類具體模板完成;
模板方法是乙個具體方法,它給出了乙個頂層邏輯框架,而邏輯的組成步驟在抽象類中可以是具體方法,也可以是抽象方法。由於模板方法是具體方法,因此模板方法模式中的抽象層只能是抽象類,而不是介面。
基本方法是實現演算法各個步驟的方法,是模板方法的組成部分。基本方法又可以分為三種:抽象方法(abstract method)、具體方法(concrete method)和鉤子方法(hook method)。
(1) 抽象方法:乙個抽象方法由抽象類宣告、由其具體子類實現。
(2) 具體方法:乙個具體方法由乙個抽象類或具體類宣告並實現,其子類可以進行覆蓋也可以直接繼承。
(3) hook方法:乙個鉤子方法由乙個抽象類或具體類宣告並實現,而其子類可能會加以擴充套件。hook方法可以提供乙個非空的預設實現。
2.具體模板:它是抽象模板的子類,實現模板中的原語操作
四.類圖:
五.**示例:
1.抽象模板類(abstracttemplate):
/**
* @classname: caffeinebeveragewithhook
* @description:抽象模板類
* @author: lsh
* @date: 2023年6月5日
*/public abstract class caffeinebeveragewithhook
}public abstract void brew();
public abstract void addcondiments();
void boilwater()
void pourincup()
/*鉤子是一種被宣告在抽象類或具體類中的具體方法,但只有空的或缺省的實現。鉤子的存在可以讓子類有能力對演算法的不同點進行掛鉤。要不要掛鉤,由子類自行決定要不要覆蓋hook方法。
*/public boolean customerwantscondiments()
}
2.具體模板類(concretetemplate1):
/**
* @classname: coffee
* @description:具體模板類
* @author: lsh
* @date: 2023年6月5日
*/public class tea extends caffeinebeveragewithhook
public void addcondiments()
// 重寫父類中的hook方法
public boolean customerwantscondiments() else
}private string getuserinput() catch (ioexception e)
if (answer == null)
return answer;
}
3.測試:
public static void main(string args) }
六.總結:
1.模板方法定義了演算法的步驟(框架),把這些步驟的實現延遲到子類中去實施
2.模板方法模式為我們提供一種**復用的重要技巧
3.模板方法的抽象類可以定義具體方法、抽象方法和hook
hook是一種方法,它在抽象類中不做事,或者只做預設的事情,子類可以選擇要不要去覆蓋它。
設計模式 模板方法模式 Java
模板方法模式 template 定義乙個操作中演算法的框架,而將一些步驟延遲到子類中。模板方法模式使得子類可以不改變乙個演算法的結構即可重定義該演算法的某些特定步驟。舉個栗子 小明想在學習過後去運動或者上會網,那麼小明在學習某門課程過後一定會搞點事情,而這些事情是可變化的,誰也不知道他要幹什麼,所以...
java設計模式 模板方法模式
在模板模式 template pattern 中,乙個抽象類公開定義了執行它的方法的方式 模板。它的子類可以按需要重寫方法實現,但呼叫將以抽象類中定義的方式進行。這種型別的設計模式屬於行為型模式。準備乙個抽象類,將部分邏輯以具體方法的形式實現,然後宣告一些抽象方法交由子類實現剩餘邏輯,有鉤子方法給予...
JAVA設計模式 模板方法模式
模板方法模式是一種行為型設計模式。其思想是 將部分邏輯以具體方法的形式實現,然後宣告一些抽象方法來迫使子類實現剩餘的邏輯,不同的子類可以以不同的方式實現這些抽象方法,從而對剩餘的邏輯有不同的實現。模板方法模式涉及到2個角色 具體模板 concrete template 結構圖 具體 實現 publi...