GeekBand C++ 李建忠老師 設(shè)計(jì)模式

第二講 策略模式

動(dòng)機(jī):

在軟件的構(gòu)建過程中,某些對(duì)象使用的算法可能多種多樣,經(jīng)常改變,如果將這些算法都編碼到對(duì)象中,將會(huì)使對(duì)象變的異常復(fù)雜,而且有時(shí)候支持不使用的算法也是一種負(fù)擔(dān)。

如果在運(yùn)行時(shí)根據(jù)需要透明的更改對(duì)象的算法?將算法與對(duì)象本身解耦從而避免上述問題?

代碼示例

解決多算法問題的一般代碼

這里SalesOrder對(duì)象就和具體的計(jì)稅算法綁定到了一起,通常見到else if語句出現(xiàn),就意味著需要重構(gòu)。如果現(xiàn)在希望添加有一種新的國(guó)家稅法,就要修改TaxBase遺以及SalesOrder。這就和“開閉原則”想違背了,該原則要求對(duì)拓展開放、對(duì)更改封閉。類模塊應(yīng)該用拓展的方式應(yīng)對(duì)今后的變化。如何在SalesOrder中消除掉else if,將其與具體的計(jì)稅算法解耦合?

將不同國(guó)家的稅法算法抽象成類

SalesOrder類的寫法也要相應(yīng)的發(fā)生變化:

SalesOrder的新寫法

通過封裝、多態(tài)技術(shù),將不同算法抽象成TaxStrategy的派生類,并實(shí)現(xiàn)計(jì)算相應(yīng)稅法的虛函數(shù),以此來將SalesOrder與具體的稅法算法解耦合。

模式定義

定義一系列算法,把它們一個(gè)個(gè)封裝起來,并且使它們可互相替換。該模式使得算法可以獨(dú)立于使用它的客戶程序而變化?!对O(shè)計(jì)模式》

結(jié)構(gòu)


策略模式的結(jié)構(gòu)

其中Context和Strategy可以在Strategy的子類發(fā)生變的時(shí)候保持穩(wěn)定、實(shí)現(xiàn)可復(fù)用

要點(diǎn)總結(jié)

Strategy及其子類為組件提供了一系列可重用的算法,從而使得類型在運(yùn)行時(shí)方便的根據(jù)需要在各個(gè)算法之間進(jìn)行切換。

策略模式提供了用條件判斷語句以外的另一種選擇,消除條件判斷語句,就是在解耦合。含有許多條件判斷語句的代碼通常都需要Strategy模式。

如果Strategy對(duì)象沒有實(shí)例變量,那么各個(gè)上下文可以共享同一個(gè)Strategy對(duì)象,從而節(jié)省對(duì)象開銷。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 第一講 課程目標(biāo) 理解松耦合設(shè)計(jì)思想 掌握面向?qū)ο笤O(shè)計(jì)原則 掌握重構(gòu)技法改善設(shè)計(jì) 掌握GOF核心設(shè)計(jì)模式 GOF設(shè)...
    帶三本書閱讀 3,715評(píng)論 0 1
  • 1. 設(shè)計(jì)模式簡(jiǎn)介 課程目標(biāo) 理解松耦合設(shè)計(jì)思想 掌握面向?qū)ο笤O(shè)計(jì)原則 掌握重構(gòu)技法改善設(shè)計(jì) 掌握GOF 核心設(shè)計(jì)...
    一般的路人丙閱讀 2,161評(píng)論 0 2
  • 設(shè)計(jì)模式基本原則 開放-封閉原則(OCP),是說軟件實(shí)體(類、模塊、函數(shù)等等)應(yīng)該可以拓展,但是不可修改。開-閉原...
    西山薄涼閱讀 4,086評(píng)論 3 14
  • 工廠模式類似于現(xiàn)實(shí)生活中的工廠可以產(chǎn)生大量相似的商品,去做同樣的事情,實(shí)現(xiàn)同樣的效果;這時(shí)候需要使用工廠模式。簡(jiǎn)單...
    舟漁行舟閱讀 8,140評(píng)論 2 17
  • 設(shè)計(jì)模式匯總 一、基礎(chǔ)知識(shí) 1. 設(shè)計(jì)模式概述 定義:設(shè)計(jì)模式(Design Pattern)是一套被反復(fù)使用、多...
    MinoyJet閱讀 4,095評(píng)論 1 15

友情鏈接更多精彩內(nèi)容