在學習設計模式中,最令人頭疼的不是這些模式怎麼記,而是許多設計模式太多相似,讓人眼花繚亂,單獨看某乙個設計模式,我們沒有問題,可是當全域性看時,一時間不知道自己該用哪乙個或者我用的到底是哪乙個。
這是定義:
模板方法(templatemethod)模式:定義乙個操作中的演算法骨架,而將演算法的一些步驟延遲到子類中,使得子類可以不改變該演算法結構的情況下重定義該演算法的某些特定步驟。
策略(strategy)模式:定義了一系列演算法,並將每個演算法封裝起來,使它們可以相互替換,且演算法的改變不會影響使用演算法的客戶。
從定義我們能看的出來,模板方法更關注類,策略模式更關注演算法的封裝,乙個是封裝到子類物件中,乙個是將演算法介面抽象出來,然後由專門的演算法實線子類來完成。
其實,如果我們把模板方法中的抽象方法抽取成乙個介面,實現方法抽取成乙個類,並且讓該類擁有乙個上述介面的引用,模板方法就轉換成了策略模式。
對應關係為:
模板分離出來的介面------>抽象策略
模板分離出來的類------->策略環境類
模板實現子類------->擁有具體實現策略的策略環境類。
客戶端在呼叫時根據環境類來使用,傳入具體策略即可,策略模式是對模板方法的再次封裝,將抽象方法封裝起來了。
命令模式 策略模式 模板方法
一 策略模式 策略模式 封裝易變化的演算法,可互相替換。gof 設計模式 中說道 定義一系列演算法,把它們乙個個封裝起來,並且使它們可以相互替換。該模式使得演算法可獨立於它們的客戶變化。這裡講兩個點 1 推送方式可以互相替換 2 這些推送方式只是單純的屬於推送服務這個類本身。二 命令模式 命令模式 ...
模板方法模式 策略模式區別聯絡
模板方法模式 定義 一系列演算法,子類延伸實現。著重點在於 子類去處理不同的方法實現。看下面例子。假如乙個支付 都包含三個部分 生成訂單 呼叫api發起支付 處理訂單 購物流程 模板方法基類 authorliangxing.zhu create 2018 9 15 since1.0.0 public...
設計模式之策略模式與模板模式
策略模式比較類似於乙個計算有多種計算過程來獲得結果,我們把每種計算方式封裝為乙個策略,把策略作為可選擇引數來決定使用什麼計算方式。定義策略介面,表示dofight計算過程。public inte ce fightstrategy 定義實現策略類,表示各個不同的計算過程。public class xi...