設計模式 9 模板模式

2021-07-11 00:17:39 字數 1619 閱讀 2163

原理:在乙個方法中定義了乙個演算法的骨架或者步驟,而將一些步驟延遲到子類中去實現

模板方法可以使得子類在不改變演算法結構的情況下,重新定義演算法中某一些步驟

模板方法中的方法可以分為兩類:模板方法和基本方法(基本方法又可以分為抽象方法、具體方法、鉤子方法)

模板方法:乙個模板方法是定義在抽象類中的,把基本方法組合在一起形成乙個總算法或者總行為的方法

乙個抽象類中可以有多個模板方法,每乙個模板方法可以呼叫多個具體方法

模板方法一般設定成final,防止子類覆蓋該演算法的步驟

基本方法:

抽象方法:由子類具體的實現

具體方法:由抽象類宣告並實現,子類並不實現或者置換

鉤子方法:由抽象類宣告並實現,而子類會加以擴充套件

比如我們現在需要泡茶和泡咖啡

泡茶:將水煮沸-沸水煮茶-倒入杯中-判斷是否加東西 -如果加東西則執行加東西的方法(加檸檬)

泡咖啡:將水煮沸-沸水煮咖啡-倒入杯中-判斷是否加東西 -如果加東西則執行加東西的方法(加糖)

從這裡我們可以提取出模板方法就是:五個步驟

基本方法就是實現的具體

抽象方法:沸水煮茶和沸水煮咖啡   如果加東西則執行加東西的方法(加檸檬)和如果加東西則執行加東西的方法(加糖)是抽象方法由子類實現

具體方法:將水煮沸和倒入杯中

鉤子方法:判斷是否加入東西(這裡我們可以假設泡茶的時候加東西,泡咖啡不加東西)

抽象類

public abstract class dreammake 

//抽象方法

abstract void brew();

abstract void addsomething();

//具體方法

private void boilwater()

//具體方法

private void pourincap()

//鉤子方法:預設是加東西的這裡要注意用public給子類用

public boolean isputsomething()

}

具體類(茶)

public class dreamtea extends dreammake

@override

void addsomething()

}

具體類(咖啡)

public class dreamcafe extends dreammake 

@override

void addsomething()

public boolean isputsomething()

}

客戶端呼叫

public class main 

}

執行結果

將水煮沸

沸水煮茶

倒入杯中

加檸檬將水煮沸

沸水煮咖啡

倒入杯中

總結:1.模板方法中把不變的行為搬移到超類中,減少子類**的重複

2.子類實現某些細節有利於演算法的擴充套件

3.策略模式和模板模式都是封裝演算法,前者使用組合委託模型,後者使用繼承

設計模式 9 設計模式

文章 head first 第一章 head first 設計模式讀書筆記 1 策略模式 觀察者模式 head first設計模式學習2 裝飾者模式 head first 設計模式3 工廠模式 head first設計模式4 命令模式 head first 設計模式5 介面卡模式和外觀模式 head...

模板設計模式 設計模式 模板方法模式

在模板模式 template pattern 中,乙個抽象類公開定義了執行它的方法的方式 模板。它的子類可以按需要重寫方法實現,但呼叫將以抽象類中定義的方式進行。這種型別的設計模式屬於行為型模式。首先需要一定抽象的定義,沒有具體的實現,但是在抽象類的行為中,子類去程序這個抽象類,重寫抽象方法,實現不...

模板設計模式 設計模式之模板模式

模板模式,通常又叫做模板方法模式,乙個抽象類公開定義了執行方法的模板,它的子類可以按需要重寫方法實現,但呼叫將以抽象類中定義的方法進行,這種型別的設計模式屬於行為型模式。模板模式主要解決將通用的演算法抽象起來,同樣的 邏輯出現了重複,就可以使用模板模式進行重構。關鍵 在抽象類實現,其他步驟在子類實現...