設(shè)計(jì)模式-策略模式

比如在一個(gè)系統(tǒng)中,所有對(duì)系統(tǒng)的操作都要有日志記錄,而且這個(gè)日志還需要有管理界面,這種情況下通常會(huì)把日志記錄在數(shù)據(jù)庫(kù)里面,方便后續(xù)的管理,但是在記錄日志到數(shù)據(jù)庫(kù)的時(shí)候,可能會(huì)發(fā)生錯(cuò)誤,比如暫時(shí)連不上數(shù)據(jù)庫(kù)了,那就先記錄在文件里面,然后在合適的時(shí)候把文件中的記錄再轉(zhuǎn)錄到數(shù)據(jù)庫(kù)中。

對(duì)于這樣的功能的設(shè)計(jì),就可以采用策略模式,把日志記錄到數(shù)據(jù)庫(kù)和日志記錄到文件當(dāng)作兩種記錄日志的策略,然后在運(yùn)行期間根據(jù)需要進(jìn)行動(dòng)態(tài)的切換。

單一職責(zé)原則(SRP),就一個(gè)類而言應(yīng)該僅有一個(gè)引起它變化的原因。如果一個(gè)類承擔(dān)的職責(zé)過多,就等于把這些職責(zé)耦合在一起,一個(gè)職責(zé)的變化可能會(huì)削弱或者抑制這個(gè)類完成其他職責(zé)的能力,這種耦合會(huì)導(dǎo)致脆弱的設(shè)計(jì)當(dāng)變化發(fā)生時(shí),設(shè)計(jì)會(huì)遭受到意想不到的破壞。

創(chuàng)建型模式:主要側(cè)重于對(duì)象的創(chuàng)建過程;

結(jié)構(gòu)型模式:主要側(cè)重于處理類或?qū)ο蟮慕M合;

行為型模式:主要側(cè)重于類或?qū)ο笾g的交互以及職責(zé)分配。

首先了解下策略模式的概念:定義了多個(gè)算法,并將它們封裝起來(一般的是每個(gè)算法封裝成一個(gè)單獨(dú)的類),讓算法獨(dú)立于客戶端而可以單獨(dú)變化。

應(yīng)用場(chǎng)景:

1、 多個(gè)類只區(qū)別在表現(xiàn)行為不同,可以使用Strategy模式,在運(yùn)行時(shí)動(dòng)態(tài)選擇具體要執(zhí)行的行為。

2、 需要在不同情況下使用不同的策略(算法),或者策略還可能在未來用其它方式來實(shí)現(xiàn)。

3、 對(duì)客戶隱藏具體策略(算法)的實(shí)現(xiàn)細(xì)節(jié),彼此完全獨(dú)立。

針對(duì)同一命令(或行為),不同的策略做不同的動(dòng)作。

具體可以看一下下面的例子(以計(jì)算加、減、乘為例):

1. 對(duì)加、減、乘每個(gè)算各自封裝成一個(gè)類,首先定義其共同的接口:

1interfaceICalculator{23publicintcalculator(inta,intb);45}

2. 分別定義加、減、乘算法類:

1classPlusimplementsICalculator {23@Override4publicintcalculator(inta,intb) {5returna +b;6}78}

1classMinusimplementsICalculator {23@Override4publicintcalculator(inta,intb) {5returna -b;6}78}

1classMultiplyimplementsICalculator {23@Override4publicintcalculator(inta,intb) {5returna *b;6}78}

3. 定義上下文環(huán)境類,用于封裝各個(gè)算法類操作:

1classContext{23privateICalculator iCalculator;45publicContext(ICalculator iCalculator){6this.iCalculator =iCalculator;7}89publicintcalculator(inta,intb){10returniCalculator.calculator(a, b);11}1213}

4. 測(cè)試:

1publicclassStrategyTest {23publicstaticvoidmain(String[] args) {4Context context =newContext(newPlus());5context.calculator(2, 3);6}78}

最后編輯于
?著作權(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)容

  • 概念及定義 概念在完成某一功能時(shí),有時(shí)需要根據(jù)不同環(huán)境采取不同的策略或行為。將這些不同的策略或行為(稱為算法)一一...
    maxwellyue閱讀 662評(píng)論 0 0
  • 定義 策略模式屬于對(duì)象的行為模式。其用意是針對(duì)一組算法,將每一個(gè)算法封裝到具有共同接口的獨(dú)立的類中,從而使得它們可...
    步積閱讀 823評(píng)論 0 2
  • 模式動(dòng)機(jī) 完成一項(xiàng)任務(wù),往往可以有多種不同的方式,每一種方式稱為一個(gè)策略,我們可以根據(jù)環(huán)境或者條件的不同選擇不同的...
    lever_xu閱讀 366評(píng)論 0 0
  • 1、概念:策略模式定義了一系列的算法,并將每一個(gè)算法封裝起來,而且使它們還可以相互替換。策略模式讓算法獨(dú)立于使用它...
    小小布谷鳥閱讀 315評(píng)論 2 0
  • Y媛姑娘閱讀 227評(píng)論 -2 1

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