知識整理No7.之#責(zé)任鏈模式chainofresponsibility

責(zé)任鏈模式 Chain of Responsibility

剖析

意圖

  • 給多個對象處理請求儡嘶,避免了接收請求的冗余。責(zé)任鏈接收對象并傳遞請求
  • 面向?qū)ο笈c遞歸遍歷鏈表

定義

  • 使用多個對象都有機會處理請求涛贯,從而避免請求的發(fā)送者和接受者之間的耦合關(guān)系妨马。將這個對象連成一條鏈盅视,并沿著這條鏈傳遞該請求枕稀,直到有一個對象處理它為止询刹。

本質(zhì)

  • 分離職責(zé)谜嫉,動態(tài)組合
  • 分離職責(zé)是前提,動態(tài)組合才是職責(zé)鏈模式的精華所在

模式講解

    • 在標(biāo)準(zhǔn)的職責(zé)鏈模式中凹联,只要有對象處理了請求沐兰,這個請求就到此為止,不在被傳遞和處理了
  • 客戶端發(fā)送請求蔽挠,總有一個隱式接收者處理請求

  • 按照實現(xiàn)地方:
    在實現(xiàn)客戶端提交請求錢組合鏈住闯。
    可以再Handler里面實現(xiàn)鏈的組合,算是內(nèi)部鏈的一種
    還有一種在各自的職責(zé)對象中澳淑,由各個職責(zé)對象自行決定后續(xù)處理對象比原。這種實現(xiàn)方式要求每個職責(zé)對象除了進(jìn)行業(yè)務(wù)處理外,還必須了解整個業(yè)務(wù)流程
    數(shù)據(jù)來源:
    一種在程序中動態(tài)組合
    通過外部
    通過配置文件傳遞進(jìn)來,流程的配置文件
    按照設(shè)定好的條件來判斷請求對象

  • 在責(zé)任鏈模式中,請求不一定處理,因為可能沒有合適的處理者,請求在責(zé)任鏈中從頭到尾吕晌,每個處理對象都判斷都不屬于自己處理,最后請求就沒有對象來處理

UML

chain-uml.png

模式組成

  • Handler:定義職責(zé)的接口作谭,通常在這里定義處理請求的方法洲赵,可以再這里實現(xiàn)后繼鏈
  • ConcreteHandler: 實現(xiàn)職責(zé)的類,在這個類中识腿,實現(xiàn)對他職責(zé)范圍內(nèi)請求的處理出革,如果不處理,就繼續(xù)轉(zhuǎn)發(fā)請求給后繼者
  • Client:職責(zé)鏈的客戶端渡讼,向鏈上的具體處理對象提交請求骂束,讓職責(zé)鏈負(fù)責(zé)處理

抽象處理類:抽象處理類中主要包含一個指向下一處理類的成員變量nextHandler和一個處理請求的方法handRequest,handRequest方法的主要主要思想是成箫,如果滿足處理的條件展箱,則有本處理類來進(jìn)行處理,否則由nextHandler來處理蹬昌。
*** 具體處理類***:具體處理類主要是對具體的處理邏輯和處理的適用條件進(jìn)行實現(xiàn)混驰。

抽象類實現(xiàn)三個職責(zé):

  • 定義一個請求處理方法handleMessage 唯一對外開放的方法
  • 定義一個鏈的編排方法setNext 設(shè)置下一個處理者;
  • 定義了具體的請求者必須實現(xiàn)兩個方法:定義自己能夠處理的級別getHandlerLevel和具體的處理任務(wù)scho

例子

chain-example.png

場景

  • 有多個對象可以處理請求皂贩,而處理程序只有在運行時才能確定栖榨。
  • 向一組對象發(fā)生請求,而不想顯示指定處理請求的特定處理程序明刷。
  • 想要動態(tài)制定處理一個請求的對象集合婴栽,可以使用職責(zé)鏈模式。

優(yōu)缺點

優(yōu)點

  • 請求者和接收者松散耦合
  • 動態(tài)組合職責(zé)

缺點

  • 產(chǎn)生許多細(xì)粒度對象
  • 不一定能背處理
  • 性能問題
  • 調(diào)試不方便

總結(jié)

  • 責(zé)任鏈模式其實就是一個靈活版的if…else…語句辈末,它就是將這些判定條件的語句放到了各個處理類中愚争,這樣做的優(yōu)點是比較靈活了映皆,但同樣也帶來了風(fēng)險,比如設(shè)置處理類前后關(guān)系時准脂,一定要特別仔細(xì)劫扒,搞對處理類前后邏輯的條件判斷關(guān)系,并且注意不要在鏈中出現(xiàn)循環(huán)引用的問題狸膏。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末沟饥,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子湾戳,更是在濱河造成了極大的恐慌贤旷,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件砾脑,死亡現(xiàn)場離奇詭異幼驶,居然都是意外死亡,警方通過查閱死者的電腦和手機韧衣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進(jìn)店門盅藻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人畅铭,你說我怎么就攤上這事氏淑。” “怎么了硕噩?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵假残,是天一觀的道長。 經(jīng)常有香客問我炉擅,道長辉懒,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任谍失,我火速辦了婚禮眶俩,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘快鱼。我一直安慰自己颠印,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布攒巍。 她就那樣靜靜地躺著嗽仪,像睡著了一般。 火紅的嫁衣襯著肌膚如雪柒莉。 梳的紋絲不亂的頭發(fā)上闻坚,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天,我揣著相機與錄音兢孝,去河邊找鬼窿凤。 笑死仅偎,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的雳殊。 我是一名探鬼主播橘沥,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼夯秃!你這毒婦竟也來了座咆?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤仓洼,失蹤者是張志新(化名)和其女友劉穎介陶,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體色建,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡哺呜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了箕戳。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片某残。...
    茶點故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖陵吸,靈堂內(nèi)的尸體忽然破棺而出玻墅,到底是詐尸還是另有隱情,我是刑警寧澤走越,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布椭豫,位于F島的核電站耻瑟,受9級特大地震影響旨指,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜喳整,卻給世界環(huán)境...
    茶點故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一谆构、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧框都,春花似錦搬素、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至谓罗,卻和暖如春粱哼,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背檩咱。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工揭措, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留胯舷,地道東北人。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓绊含,卻偏偏與公主長得像桑嘶,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子躬充,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,871評論 2 354

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