設計模式 - 職責鏈模式

  • 簡介
    使多個對象都有機會處理請求风皿,從而避免請求的發(fā)送者和接受者之間的耦合關系廊遍。將這個對象連成一條鏈,并沿著這條鏈傳遞該請求曼氛,直到有一個對象處理它為止豁辉。
  • 職責鏈的好處:
    • 當客戶提交一個請求時,請求是沿鏈傳遞直至有一個 ConcreteHandler 對象負責處理它舀患。
    • 鏈中的對象自己并不知道鏈的結果徽级。結果是職責鏈可簡化對象的相互連接,它們僅僅需要保持一個指向后繼者的引用聊浅,而不需要保持它所有的后選接受者的引用餐抢。降低了耦合性。
    • 可以隨時增加或者修改處理一個請求的結構低匙,增強了給對象指派職責的靈活性旷痕。
  • 弊端:
    • 一個請求可能到最后都沒有被處理,需要考慮周全顽冶。
  • 實現(xiàn)
abstract class Handler
{
    protected Handler successer;
    public void SetSuccessor(Handler successor){
        this.successor = successor;
    }
    public abstract void HandleRequest(int request);
}
/*
    具體處理類苦蒿,處理它所負責的請求,可訪問它的繼承者而渗稍,如果可處理該請求,
    就處理之团滥,否則就講該請求轉發(fā)給它的后繼者竿屹。
*/
class ConcreteHandler1:Handler
{
    public override void HandleRequest(int request){
        if(request >=0&&request<10){
            Console.WriteLine("{0}處理請求{1}",this.GetType().Name,request);
        }else if(successor != null){
            successor.HandleRequest(request);
        }       
    }
}
class ConcreteHandler2 : Handler
{
    public override void HandleRequest(int request){
        if(request>=10 &&request <20){
            Console.WriteLine("{0}處理請求{1}",this.GetType().Name,request);
        }
        else if(successor !=null){
            successor.HandleRequest(request);
        }
    }
}
class ConcreteHandler3 : Handler
{
    public override void HandleRequest(int request){
        if(request>=20 &&request <30){
            Console.WriteLine("{0}處理請求{1}",this.GetType().Name,request);
        }
        else if(successor !=null){
            successor.HandleRequest(request);
        }
    }
}
static void Main(strings[] args){
        /*
          創(chuàng)建了三個處理者對象
          h1是第一個處理者
          h2被h1設置為下一個處理者
          h3被 h2設置為下一個處理者
          當請求符合哪個對象的處理條件,就會被當前對象處理灸姊。
        */
    Handler h1 = new ConcreteHandler1();
    Handler h2 = new ConcreteHandler2();
    Handler h3 = new ConcreteHandler3();
    h1.SetSuccessor(h2);
    h2.SetSuccessor(h3);
    int requests[] = {2,5,14,22,18,3,27,20};
    foreach(int request in requests)
    {
        h1.HandleRequest(request);
    }
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末拱燃,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子力惯,更是在濱河造成了極大的恐慌碗誉,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件父晶,死亡現(xiàn)場離奇詭異哮缺,居然都是意外死亡,警方通過查閱死者的電腦和手機甲喝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進店門尝苇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人埠胖,你說我怎么就攤上這事糠溜。” “怎么了直撤?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵非竿,是天一觀的道長。 經常有香客問我谋竖,道長红柱,這世上最難降的妖魔是什么承匣? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮豹芯,結果婚禮上悄雅,老公的妹妹穿的比我還像新娘。我一直安慰自己铁蹈,他們只是感情好宽闲,可當我...
    茶點故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著握牧,像睡著了一般容诬。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上沿腰,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天览徒,我揣著相機與錄音,去河邊找鬼颂龙。 笑死习蓬,一個胖子當著我的面吹牛,可吹牛的內容都是我干的措嵌。 我是一名探鬼主播躲叼,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼企巢!你這毒婦竟也來了枫慷?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤浪规,失蹤者是張志新(化名)和其女友劉穎或听,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體笋婿,經...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡誉裆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了萌抵。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片找御。...
    茶點故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖绍填,靈堂內的尸體忽然破棺而出霎桅,到底是詐尸還是另有隱情,我是刑警寧澤讨永,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布滔驶,位于F島的核電站,受9級特大地震影響卿闹,放射性物質發(fā)生泄漏揭糕。R本人自食惡果不足惜萝快,卻給世界環(huán)境...
    茶點故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望著角。 院中可真熱鬧揪漩,春花似錦、人聲如沸吏口。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽产徊。三九已至昂勒,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間舟铜,已是汗流浹背戈盈。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留谆刨,地道東北人塘娶。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓痊夭,卻偏偏與公主長得像血柳,于是被迫代替她去往敵國和親生兆。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,627評論 2 350

推薦閱讀更多精彩內容