模板方法模式

2021-08-29 00:04:46 字數 1707 閱讀 6791

1定義演算法的步驟,允許子類為乙個或多個步驟提供實現。

2模板方法模式:在乙個final方法中,定義乙個演算法的骨架,而將一些步驟延遲到子類中。使得子類在不改變演算法結構的情況下,定義演算法中的某些步驟。

3個人理解:乙個final方法m,裡面包含幾個抽象方法a,b,c,該抽象方法讓子類繼承。方法m是演算法的模板,a,b,c是演算法的步驟,步驟的具體實現由子類提供。

鉤子

定義在抽象類的方法,有空或者預設實現,可以讓子類有能力對演算法的不同點進行掛鉤(覆蓋),適用於是演算法點對子類是可選的操作。讓子類有能力為抽象類做決定。

好萊塢原則

1防止依賴腐敗

2允許低層元件將自己掛到系統上,但是高層元件決定什麼時候使用這些低層元件。

3高層元件對低層元件方式:別呼叫我,我會呼叫你.

依賴腐敗:

高層元件依賴低層元件,低層元件依賴高層元件,高層元件依賴邊側元件,邊側元件依賴低層元件,這時就產生依賴腐敗。

案列**(包含鉤子)

public abstract class caffeinebeverage 

} /**

* * 描述:沖泡飲料

*/abstract void brew();

/***

* 描述:新增調味品(牛奶,糖)

*/abstract void addcondiments();

/***

* 描述:鉤子,決定是否要新增調味品,預設是

* @return

*/boolean customerwantscondiments()

/***

* 描述:將水煮沸

*/void boilwater()

/***

* 描述:將咖啡類飲料匯入杯子中

*/void pourincup()

}

public class coffee extends caffeinebeverage 

public void addcondiments()

@override

boolean customerwantscondiments()

}public class tea extends caffeinebeverage

public void addcondiments()

}

測試

public static void main(string args) 

}結果:

子類茶決定咖啡飲料的沖泡步驟

將水煮沸

沖泡茶將咖啡類飲料倒入杯子中

新增牛奶

子類咖啡決定咖啡飲料的沖泡步驟

將水煮沸

沖泡存咖啡

將咖啡類飲料倒入杯子中

模板方法模式

有這樣乙個場景 乙個演算法或流程,它的步驟以及步驟之間的順序是固定的,但具體的某一步可能有不同的實現。對於這麼乙個場景,可以建立多個類,各個類實現不同的實現,但是這樣的缺點是 易錯 難改,易錯 應為步驟和順序是固定的,而且在每個類中都要寫一遍,程式設計師怎有心情不好的時候,就有可能把其中某一步給寫錯...

模板方法模式

模板方法模式 定義乙個演算法框架,將裡面的操作步驟推遲到子類中去執行,這樣使得子類不用改變框架,只需改變某些操作步驟方法 ifndef test h define test h include include using namespace std class test virtual test v...

模板方法模式

模板方法模式 在乙個方法中定義乙個演算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以在不改變演算法結構的情況下,重新定義演算法的某些步驟。還可以使用鉤子對可選部分進行判斷。include include using namespace std class caffeinebeverage ...