責任鏈模式

1.定義#

使多個對象都有機會處理請求,從而避免了請求的發(fā)送者和接受者之間的耦合關系谓苟。將這些對象連成一條鏈官脓。并沿著這條鏈傳遞該請求,直到有對象處理它為止娜谊。
責任鏈使用了一種遞歸的方式查找符合條件的對象處理請求确买。所有的處理對象被串聯(lián)成一個對象鏈,請求者從第一個對象開始從頭到尾嘗試每一個對象找到合適的對象則返回一個響應纱皆。Handler類使用模板模式實現(xiàn)了責任處理流程handleMessage湾趾;實現(xiàn)了設置責任鏈的方法setNext;定義了具體處理者ConcreteHandler的處理方法echo派草。
Invoke類封裝了責任鏈的構成方法setLink搀缠。

2.類圖#

類圖

3.實現(xiàn)#

3.1抽象處理者##

抽象處理者主要有三個職責:第一處理請求的方法handleMessage第二設置責任鏈的方法setNext第三定義具體處理者的處理方法echo

    public abstract class Handler {
      private Handler nextHandler;
      public final Response handleMessage(Request request)
      {
        Response response = null;
        //判斷是否由當前處理者處理
        if(this.getHandlerLevel().equals(request.getRequestLevel()))
        {
          response = this.echo(request);
        }else{
          //判斷是否有下一個處理者
          if(this.nextHandler != null)
          {
            response = this.nextHandler.handlerMessage(request);
          }
        }
        return response;
      }
      public void setNext(Handler _handler)
      {
        this.nextHandler = _handler;
      }
      //獲取當前處理者級別
      protected abstract Level getHandlerLevel();
      //當前處理者處理
      protected abstract Response echo(Request request);
    }
    ```
  ##3.2具體處理者##  

public class ConcreteHandler1 extends Handler{

protected Response echo(Request request)
{
  //處理任務
  return null;
}

protected Level getHandlerLevel()
{
  //獲取當前處理者等級
  return null;
}

}
public class ConcreteHandler2 extends Handler{

protected Response echo(Request request)
{
  //處理任務
  return null;
}

protected Level getHandlerLevel()
{
  //獲取當前處理者等級
  return null;
}

}
public class ConcreteHandler3 extends Handler{

protected Response echo(Request request)
{
  //處理任務
  return null;
}

protected Level getHandlerLevel()
{
  //獲取當前處理者等級
  return null;
}

}


##3.3相關模塊##

public class Level{
//處理等級
}

public class Request{
public Level getRequestLevel(){}
}

public class Response{
//處理者響應數(shù)據(jù)
}


##3.4責任鏈組裝者##

public class Invoke{
public static Handler concreteHandler1 = new ConcreteHandler1();
public static Handler concreteHandler2 = new ConcreteHandler2();
public static Handler concreteHandler3 = new ConcreteHandler3();

public Handler  getHandlerLink(){
  concreteHandler1.setNext(concreteHandler2);
  concreteHandler2.setNext(concreteHandler3);
  return concreteHandler1;
}

}


##3.5場景類##

public class Client{
public static void main(String[] args)
{
Invoke invoke = new Invoke();
Response response = invoke.getHandlerLink().handlerMessage(request);
}
}


#4責任鏈優(yōu)缺點#
優(yōu)點:請求和處理分離。
缺點:責任鏈過長導致性能問題近迁。注意控制責任鏈長度艺普。
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子歧譬,更是在濱河造成了極大的恐慌岸浑,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,324評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件瑰步,死亡現(xiàn)場離奇詭異矢洲,居然都是意外死亡,警方通過查閱死者的電腦和手機缩焦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評論 3 392
  • 文/潘曉璐 我一進店門读虏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人袁滥,你說我怎么就攤上這事盖桥。” “怎么了题翻?”我有些...
    開封第一講書人閱讀 162,328評論 0 353
  • 文/不壞的土叔 我叫張陵揩徊,是天一觀的道長。 經(jīng)常有香客問我藐握,道長靴拱,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,147評論 1 292
  • 正文 為了忘掉前任猾普,我火速辦了婚禮袜炕,結果婚禮上,老公的妹妹穿的比我還像新娘初家。我一直安慰自己偎窘,他們只是感情好,可當我...
    茶點故事閱讀 67,160評論 6 388
  • 文/花漫 我一把揭開白布溜在。 她就那樣靜靜地躺著陌知,像睡著了一般。 火紅的嫁衣襯著肌膚如雪掖肋。 梳的紋絲不亂的頭發(fā)上仆葡,一...
    開封第一講書人閱讀 51,115評論 1 296
  • 那天,我揣著相機與錄音志笼,去河邊找鬼沿盅。 笑死,一個胖子當著我的面吹牛纫溃,可吹牛的內(nèi)容都是我干的腰涧。 我是一名探鬼主播,決...
    沈念sama閱讀 40,025評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼紊浩,長吁一口氣:“原來是場噩夢啊……” “哼窖铡!你這毒婦竟也來了疗锐?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,867評論 0 274
  • 序言:老撾萬榮一對情侶失蹤费彼,失蹤者是張志新(化名)和其女友劉穎滑臊,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體敌买,經(jīng)...
    沈念sama閱讀 45,307評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡简珠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,528評論 2 332
  • 正文 我和宋清朗相戀三年阶界,在試婚紗的時候發(fā)現(xiàn)自己被綠了虹钮。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,688評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡悄蕾,死狀恐怖销斟,靈堂內(nèi)的尸體忽然破棺而出熟史,到底是詐尸還是另有隱情,我是刑警寧澤春畔,帶...
    沈念sama閱讀 35,409評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站岛都,受9級特大地震影響律姨,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜臼疫,卻給世界環(huán)境...
    茶點故事閱讀 41,001評論 3 325
  • 文/蒙蒙 一择份、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧烫堤,春花似錦荣赶、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至富蓄,卻和暖如春剩燥,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背立倍。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評論 1 268
  • 我被黑心中介騙來泰國打工灭红, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人帐萎。 一個月前我還...
    沈念sama閱讀 47,685評論 2 368
  • 正文 我出身青樓比伏,卻偏偏與公主長得像,于是被迫代替她去往敵國和親疆导。 傳聞我的和親對象是個殘疾皇子赁项,可洞房花燭夜當晚...
    茶點故事閱讀 44,573評論 2 353

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