設(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è)類(lèi)而言應(yīng)該僅有一個(gè)引起它變化的原因。如果一個(gè)類(lèi)承擔(dān)的職責(zé)過(guò)多燥爷,就等于把這些職責(zé)耦合在一起蜈亩,一個(gè)職責(zé)的變化可能會(huì)削弱或者抑制這個(gè)類(lèi)完成其他職責(zé)的能力,這種耦合會(huì)導(dǎo)致脆弱的設(shè)計(jì)當(dāng)變化發(fā)生時(shí)局劲,設(shè)計(jì)會(huì)遭受到意想不到的破壞勺拣。

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

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

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

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

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

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

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

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

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

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

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

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

2. 分別定義加、減咕幻、乘算法類(lèi):

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)境類(lèi)渔伯,用于封裝各個(gè)算法類(lèi)操作:

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)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市谅河,隨后出現(xiàn)的幾起案子咱旱,更是在濱河造成了極大的恐慌,老刑警劉巖绷耍,帶你破解...
    沈念sama閱讀 222,590評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異鲜侥,居然都是意外死亡褂始,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)描函,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)崎苗,“玉大人,你說(shuō)我怎么就攤上這事舀寓〉ㄊ” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,301評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵互墓,是天一觀(guān)的道長(zhǎng)必尼。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么判莉? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,078評(píng)論 1 300
  • 正文 為了忘掉前任豆挽,我火速辦了婚禮,結(jié)果婚禮上券盅,老公的妹妹穿的比我還像新娘帮哈。我一直安慰自己,他們只是感情好锰镀,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,082評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布娘侍。 她就那樣靜靜地躺著,像睡著了一般泳炉。 火紅的嫁衣襯著肌膚如雪憾筏。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,682評(píng)論 1 312
  • 那天胡桃,我揣著相機(jī)與錄音踩叭,去河邊找鬼。 笑死翠胰,一個(gè)胖子當(dāng)著我的面吹牛容贝,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播之景,決...
    沈念sama閱讀 41,155評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼斤富,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了锻狗?” 一聲冷哼從身側(cè)響起满力,我...
    開(kāi)封第一講書(shū)人閱讀 40,098評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎轻纪,沒(méi)想到半個(gè)月后油额,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,638評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡刻帚,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,701評(píng)論 3 342
  • 正文 我和宋清朗相戀三年潦嘶,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片崇众。...
    茶點(diǎn)故事閱讀 40,852評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡掂僵,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出顷歌,到底是詐尸還是另有隱情锰蓬,我是刑警寧澤,帶...
    沈念sama閱讀 36,520評(píng)論 5 351
  • 正文 年R本政府宣布眯漩,位于F島的核電站芹扭,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜冯勉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,181評(píng)論 3 335
  • 文/蒙蒙 一澈蚌、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧灼狰,春花似錦宛瞄、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,674評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至蝴簇,卻和暖如春杯活,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背熬词。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,788評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工旁钧, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人互拾。 一個(gè)月前我還...
    沈念sama閱讀 49,279評(píng)論 3 379
  • 正文 我出身青樓歪今,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親颜矿。 傳聞我的和親對(duì)象是個(gè)殘疾皇子寄猩,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,851評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容

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