模板模式和策略模式的區別

2021-05-24 07:23:30 字數 999 閱讀 8016

設計模式的原則

1、"開-閉"原則——模組應對擴充套件開放,而對修改關閉。

2、黎克特制代換原則——如果呼叫的是父類的話,那麼換成子類也完全可以執行。黎克特制代換原則是繼承復用的乙個基礎。

3、合成復用原則——要少用繼承,多用合成關係來實現。

4、依賴倒轉原則——抽象不應該依賴與細節,細節應當依賴與抽象。

要針對介面程式設計,而不是針對實現程式設計。

5、介面隔離原則——每乙個介面應該是一種角色,不多不少,不幹不該幹的事,該幹的事都要幹。

6、抽象類

7、迪公尺特法則——最少知識原則。不要和陌生人說話。

strategy模式的應用場景是:

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

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

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

template method模式的應用場景是:

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

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

設計模式中有這麼乙個原則: prefer composition to inheritance.

strategy模式允許外界使用其介面方法,因而可以將這個介面方法認為是"一整個演算法";而template method模式可以限制所留下的虛方法只對其繼承類可見,外部使用者不一定能夠直接使用這些虛方法,因而可以將這些虛方法認為是"乙個演算法的一部分".gof的設計模式那本書裡有這麼一句話:"template methods use inheritance to vary part of an algorithm. strategies use delegation to vary the entire algorithm.",說的正是這個問題.回到具體問題上,如果我們要封裝的演算法適合於提供給使用者任意使用,是"一整個演算法",那麼用strategy 模式較好;如果要封裝的變化是乙個演算法中的部分(換言之,大演算法的步驟是固定的),而且我們不希望使用者直接使用這些方法,那麼應該使用template method模式.

模板模式同策略模式區別

模板方法 同 strategry pattern 區別 模板方法 定義乙個演算法的大綱,而由其子類定義其中某些步驟的內容。而其演算法的個別步驟可以有不同的實現細節。演算法結構依然維持不變。用繼承的方式改變演算法中的具體步驟,依賴程度高,演算法在父類 父類是抽象類 中實現,演算法的具體步驟在子類中實現...

模板模式同策略模式區別

模板方法 同 strategry pattern 區別 模板方法 定義乙個演算法的大綱,而由其子類定義其中某些步驟的內容。而其演算法的個別步驟可以有不同的實現細節。演算法結構依然維持不變。用繼承的方式改變演算法中的具體步驟,依賴程度高,演算法在父類 父類是抽象類 中實現,演算法的具體步驟在子類中實現...

模板方法模式 策略模式區別聯絡

模板方法模式 定義 一系列演算法,子類延伸實現。著重點在於 子類去處理不同的方法實現。看下面例子。假如乙個支付 都包含三個部分 生成訂單 呼叫api發起支付 處理訂單 購物流程 模板方法基類 authorliangxing.zhu create 2018 9 15 since1.0.0 public...