策略模式和模版模式的異同

2021-09-01 08:06:38 字數 987 閱讀 9999

strategy模式的應用場景是:

1. 多個類的分別只是在於行為不同

2. 你需要對行為的演算法做很多變動

3. 客戶不知道演算法要使用的資料

template method模式的應用場景是:

1. 你想將相同的演算法放在乙個類中,將演算法變化的部分放在子類中實現

2. 子類公共的演算法應該放在乙個公共的類中,避免**重複

我們知道,設計模式中有這麼乙個原則:prefer composition to inheritance.

這句話的背景是oo初期大家都把繼承看作是萬能的,並過度使用繼承來實現多型->可擴充套件.

理解原則的時候不能脫離它的背景,不然就成盲從了.template method模式應該是伴隨著oo的出現而萌生的.它是oo中最直觀的思考方式的結果.基類留下可變化的空間給子類,由繼承類來決定具體行為.聽起來是不錯,不過...一旦基類的介面發生了變化,每個繼承類都得跟著修改才能夠繼續使用.這就是所謂高耦合與難維護的說法的**.

strategy與template method模式算是composition與inheritance的典型應用了

gof的設計模式那本書裡有這麼一句話:"template methods use inheritance to vary part of an algorithm. strategies use delegation to vary the entire algorithm.", 說的正是這個問題.回到具體問題上,

如果我們要封裝的演算法適合於提供給使用者任意使用,是"一整個演算法",那麼用strategy模式較好;

如果要封裝的變化是乙個演算法中的部分(換言之,大演算法的步驟是固定的),而且我們不希望使用者直接使用這些方法,那麼應該使用template method模式.

就此,問題的"痛處"算是抓住了.

設計模式 模版模式

模板方法模式是類的行為模式。準備乙個抽象類,將部分邏輯以具體方法以及具體建構函式的形式實現,然後宣告一些抽象方法來迫使子類實現剩餘的邏輯。不同的子類可以以不同的方式實現這些抽象方法,從而對剩餘的邏輯有不同的實現。這就是模板方法模式的用意。模板類public abstract class templa...

模版模式java

模版模式 第一種角色 抽象模版 第一種方法需要子類去實現,並且必須實現 第二個擴充套件方法,是乙個空方法,子類可以去複寫,也可以不去複寫 第三個私有的最終方法,不能複寫 第四個模版方法,這個方法中定義了每個方法的執行順序和邏輯 第二種角色 具體模版要繼承抽象模版,需要實現抽象模版中的抽象方法,可以擴...

設計模式之模版模式

模板方法模式是類的行為模式。準備乙個抽象類,將部分邏輯以具體方法以及具體建構函式的形式實現,然後宣告一些抽象方法來迫使子類實現剩餘的邏輯。不同的子類可以以不同的方式實現這些抽象方法,從而對剩餘的邏輯有不同的實現。這就是模板方法模式的用意。模版方法模式 父類宣告抽象方法,子類做具體實現 父類引用指向子...