設計模式的原則
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...