責任鏈模式

一北苟、定義

使多個對象都有機會處理請求,從而避免了請求的發(fā)送者和接受者之間的耦合關(guān)系怕篷。將這些對象連成一條鏈历筝,并沿著這條鏈傳遞該請求,直到有對象處理它為止廊谓。

  1. 優(yōu)點:將請求和處理分開梳猪。請求者可以不用知道是誰處理的,處理者可以不用知道請求的全貌蒸痹。兩者解耦春弥,提高系統(tǒng)的靈活性。
  2. 缺點:一是性能問題叠荠,每個請求都是從鏈頭遍歷到鏈尾匿沛,特別是在鏈比較長的時候,性能是一個非常大的問題榛鼎。二是調(diào)試不很方便逃呼。

二、實現(xiàn)

public class Client {
    public static void main(String[] args) {
        //聲明所有的處理節(jié)點
        Handler handler1 = new ConcreteHandler1();
        Handler handler2 = new ConcreteHandler2();
        Handler handler3 = new ConcreteHandler3();
        //設(shè)置鏈中的階段順序1-->2-->3
        handler1.setNext(handler2);
        handler2.setNext(handler3);
        //提交請求者娱,返回結(jié)果
        Response response = handler1.handleMessage(new Request());
    }
}

//抽象處理者
abstract class Handler {

    private Handler nextHandler;
    //每個處理者都必須對請求做出處理

    public final Response handleMessage(Request request) {
        Response response = null;
        //判斷是否是自己的處理級別
        if (null!=this.getHandlerLevel() && this.getHandlerLevel().equals(request.getRequestLevel())) {
            response = this.echo(request);
        } else {
            //不屬于自己的處理級別
            //判斷是否有下一個處理者
            if (this.nextHandler != null) {
                response = this.nextHandler.handleMessage(request);
            } else {
                System.out.println("沒有人能處理這個請求");
                //沒有適當?shù)奶幚碚呗樟瑯I(yè)務(wù)自行處理
            }
        }
        return response;
    }

    //設(shè)置下一個處理者是誰
    public void setNext(Handler handler) {
        this.nextHandler = handler;
    }

    //每個處理者都有一個處理級別
    protected abstract Level getHandlerLevel();

    //每個處理者都必須實現(xiàn)處理任務(wù)
    protected abstract Response echo(Request request);
}

//具體處理者
class ConcreteHandler1 extends Handler {
    //定義自己的處理邏輯
    protected Response echo(Request request) {
        //完成處理邏輯
        return null;
    }
    //設(shè)置自己的處理級別
    protected Level getHandlerLevel() {
        //設(shè)置自己的處理級別
        return null;
    }
}

class ConcreteHandler2 extends Handler {
    //定義自己的處理邏輯
    protected Response echo(Request request) {
        //完成處理邏輯
        return null;
    }
    //設(shè)置自己的處理級別
    protected Level getHandlerLevel() {
        //設(shè)置自己的處理級別
        return null;
    }
}

class ConcreteHandler3 extends Handler {
    //定義自己的處理邏輯
    protected Response echo(Request request) {
        //完成處理邏輯
        return null;
    }
    //設(shè)置自己的處理級別
    protected Level getHandlerLevel() {
        //設(shè)置自己的處理級別
        return null;
    }
}


class Level {
    //定義一個請求和處理等級
}
class Request {
    //請求的等級
    public Level getRequestLevel(){
        return null;
    }
}
class Response {
    //處理者返回的數(shù)據(jù)
}


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市肺然,隨后出現(xiàn)的幾起案子蔫缸,更是在濱河造成了極大的恐慌,老刑警劉巖际起,帶你破解...
    沈念sama閱讀 222,729評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拾碌,死亡現(xiàn)場離奇詭異吐葱,居然都是意外死亡,警方通過查閱死者的電腦和手機校翔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評論 3 399
  • 文/潘曉璐 我一進店門弟跑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人防症,你說我怎么就攤上這事孟辑。” “怎么了蔫敲?”我有些...
    開封第一講書人閱讀 169,461評論 0 362
  • 文/不壞的土叔 我叫張陵饲嗽,是天一觀的道長。 經(jīng)常有香客問我奈嘿,道長貌虾,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,135評論 1 300
  • 正文 為了忘掉前任裙犹,我火速辦了婚禮尽狠,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘叶圃。我一直安慰自己袄膏,他們只是感情好,可當我...
    茶點故事閱讀 69,130評論 6 398
  • 文/花漫 我一把揭開白布掺冠。 她就那樣靜靜地躺著沉馆,像睡著了一般。 火紅的嫁衣襯著肌膚如雪赫舒。 梳的紋絲不亂的頭發(fā)上悍及,一...
    開封第一講書人閱讀 52,736評論 1 312
  • 那天,我揣著相機與錄音接癌,去河邊找鬼心赶。 笑死,一個胖子當著我的面吹牛缺猛,可吹牛的內(nèi)容都是我干的缨叫。 我是一名探鬼主播,決...
    沈念sama閱讀 41,179評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼荔燎,長吁一口氣:“原來是場噩夢啊……” “哼耻姥!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起有咨,我...
    開封第一講書人閱讀 40,124評論 0 277
  • 序言:老撾萬榮一對情侶失蹤琐簇,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體婉商,經(jīng)...
    沈念sama閱讀 46,657評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡似忧,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,723評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了丈秩。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片盯捌。...
    茶點故事閱讀 40,872評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖蘑秽,靈堂內(nèi)的尸體忽然破棺而出饺著,到底是詐尸還是另有隱情,我是刑警寧澤肠牲,帶...
    沈念sama閱讀 36,533評論 5 351
  • 正文 年R本政府宣布幼衰,位于F島的核電站,受9級特大地震影響埂材,放射性物質(zhì)發(fā)生泄漏塑顺。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,213評論 3 336
  • 文/蒙蒙 一俏险、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧扬绪,春花似錦竖独、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,700評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至墓赴,卻和暖如春竞膳,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背诫硕。 一陣腳步聲響...
    開封第一講書人閱讀 33,819評論 1 274
  • 我被黑心中介騙來泰國打工坦辟, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人章办。 一個月前我還...
    沈念sama閱讀 49,304評論 3 379
  • 正文 我出身青樓锉走,卻偏偏與公主長得像,于是被迫代替她去往敵國和親藕届。 傳聞我的和親對象是個殘疾皇子挪蹭,可洞房花燭夜當晚...
    茶點故事閱讀 45,876評論 2 361

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