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 ...