設計模式-責任鏈模式

責任鏈模式里面的很多對象對其下家的引用而形成一條連鎖雨饺,請求在這個鏈條上傳遞,直到被處理完畢僧免,而客戶端并不知道鏈條上哪個鏈接點處理了這個事件。開發(fā) Web 項目的時候怀大,過濾器就是這樣工作的塘秦,過濾器互相嵌套,一個接著一個處理請求移斩。這個好處就是在客戶端不在意的情況下動態(tài)處理連接點以及分配任務。

按照慣例,先上 UML 類圖

  • Handler :抽象處理角色轿腺,定義一個處理請求的接口,可以設定返回下家的引用丛楚;
  • ConcreteHandler:具體處理角色族壳,接收到請求的具體處理者,可以選擇處理也可以不處理趣些,把請求傳遞下一個連接點仿荆。

看下具體的代碼:
先把抽象處理者寫出來,他是一個抽象類或者接口,這里使用抽象類坏平,每個處理者給一個名字 name 屬性

public abstract class Handler {
    
    private String name;
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Handler(String name) {
        this.name=name;
    }

    protected Handler handler;
    
    public Handler getHandler() {
        return handler;
    }

    public void setHandler(Handler handler) {
        this.handler = handler;
    }

    public abstract void handle();

    
}

再把具體的處理者實現(xiàn)出來

public class ConcreteHandler extends Handler{

    public ConcreteHandler(String name) {
        super(name);
    }

    @Override
    public void handle() {
        
        System.out.println("當前處理:"+getName());
        
        if(getHandler()!=null){
            getHandler().handle();
        }
        
    }

}

在該具體方法的 handle 里面拢操,處理自個當前需要做的事件,然后尋找后續(xù)處理者舶替,把到最后完成令境。

看下客戶端如何處理

public class Client {
    public static void main(String[] args) {
        Handler h1=new ConcreteHandler("handler1");
        Handler h2=new ConcreteHandler("handler2");
        h1.setHandler(h2);
        h1.handle();
    }
}

在責任鏈模式當中,對處理者而言坎穿,一旦一個請求只有一個處理者處理了展父,稱之為純的責任鏈模式,然并卵玲昧,現(xiàn)實沒有這么純的責任鏈栖茉;那么不純的就是一個請求被0個或多個處理者處理了,這個情況很常見孵延。責任鏈使得客戶端請求與接收端處理減低耦合度吕漂,使得多個處理者都可以處理這個請求。這個鏈可以是一棵樹尘应,也可以是鏈表惶凝,也可以是個環(huán)吼虎。但是每個處理者只可以傳遞任務給下一個處理者,或者自己處理掉苍鲜,不可能同時傳遞多個思灰。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市混滔,隨后出現(xiàn)的幾起案子洒疚,更是在濱河造成了極大的恐慌,老刑警劉巖坯屿,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件油湖,死亡現(xiàn)場離奇詭異,居然都是意外死亡领跛,警方通過查閱死者的電腦和手機乏德,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來吠昭,“玉大人喊括,你說我怎么就攤上這事∈概铮” “怎么了瘾晃?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長幻妓。 經(jīng)常有香客問我,道長劫拢,這世上最難降的妖魔是什么肉津? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮舱沧,結果婚禮上妹沙,老公的妹妹穿的比我還像新娘。我一直安慰自己熟吏,他們只是感情好距糖,可當我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著牵寺,像睡著了一般悍引。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上帽氓,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天趣斤,我揣著相機與錄音,去河邊找鬼黎休。 笑死浓领,一個胖子當著我的面吹牛玉凯,可吹牛的內容都是我干的。 我是一名探鬼主播联贩,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼漫仆,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了泪幌?” 一聲冷哼從身側響起盲厌,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎座菠,沒想到半個月后狸眼,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡浴滴,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年拓萌,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片升略。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡微王,死狀恐怖,靈堂內的尸體忽然破棺而出品嚣,到底是詐尸還是另有隱情炕倘,我是刑警寧澤,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布翰撑,位于F島的核電站罩旋,受9級特大地震影響,放射性物質發(fā)生泄漏眶诈。R本人自食惡果不足惜涨醋,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望逝撬。 院中可真熱鬧浴骂,春花似錦、人聲如沸宪潮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽狡相。三九已至梯轻,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間尽棕,已是汗流浹背檩淋。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蟀悦。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓媚朦,卻偏偏與公主長得像,于是被迫代替她去往敵國和親日戈。 傳聞我的和親對象是個殘疾皇子询张,可洞房花燭夜當晚...
    茶點故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內容