責(zé)任鏈模式

責(zé)任鏈模式

責(zé)任鏈模式的主要思想是超陆,對象引用了同一類型的另一個(gè)對象儒恋,形成一條鏈湖笨。鏈中的每個(gè)對象實(shí)現(xiàn)了同樣的方法剥悟,處理對鏈中第一個(gè)對象發(fā)起的同一個(gè)請求灵寺。如果一個(gè)對象不知道如何處理請求,它就把請求傳遞給下一個(gè)響應(yīng)者区岗。

責(zé)任鏈模式:使多個(gè)對象都有機(jī)會處理請求略板,從而避免請求的發(fā)送者和接收者之間發(fā)生耦合。此模式將這些對象連成一條鏈慈缔,并沿著這條鏈傳遞請求叮称,直到有一個(gè)對象處理它為止。

責(zé)任鏈模式的本質(zhì)
1 讓請求者不關(guān)心具體接收者是誰,只需要得到自己的具體結(jié)果
2 在一個(gè)請求對應(yīng)多個(gè)接收者情況下(Spring Security這種),接收者之間可以自由組合,靈活性很高
3 新增接收者處理也只需要增加鏈中的一個(gè)節(jié)點(diǎn),不需要改動太多.

責(zé)任鏈模式的UML類圖

責(zé)任鏈模式的UML類圖.png

測試代碼:

#import "ViewController.h"
#import "Handler.h"
#import "DutyOne.h"
#import "DutyTwo.h"
#import "DutyThrid.h"
@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    Handler* dutyOne = [DutyOne new];
    Handler* dutyTwo = [DutyTwo new];
    Handler* dutyThrid = [DutyThrid new];
    dutyOne.successor = dutyTwo;
    dutyTwo.successor = dutyThrid;

    Person * p1 = [Person new];
    p1.name = @"ll";
    [dutyOne  handleRequest:p1];
}
@end

2018-06-23 15:28:36.716342+0800 Duty[44650:2391873] 我不認(rèn)識ll 向下一個(gè)責(zé)任人傳遞
2018-06-23 15:28:36.716470+0800 Duty[44650:2391873] 我不認(rèn)識ll 向下一個(gè)責(zé)任人傳遞
2018-06-23 15:28:36.716563+0800 Duty[44650:2391873] 沒人認(rèn)識:ll

其它文件:

===================Handler文件===================
#import <Foundation/Foundation.h>
#import "Person.h"

@interface Handler : NSObject

// 對下一個(gè)對象進(jìn)行引用
@property (nonatomic, strong) Handler *successor;

// 處理請求的接口
- (void)handleRequest:(Person *)request;

@end


#import "Handler.h"
@implementation Handler
@end

===================Person文件===================
#import <Foundation/Foundation.h>
@interface Person : NSObject
@property(nonatomic,copy)NSString* name;
@end

#import "Person.h"
@implementation Person
@end

===================DutyOne文件===================
#import <Foundation/Foundation.h>
#import "Handler.h"
@interface DutyOne : Handler
@end

#import "DutyOne.h"
@implementation DutyOne
- (void)handleRequest:(Person *)request{
    if([request.name isEqualToString:@"zs"]){
        NSLog(@"張三我認(rèn)識");
    } else {
           NSLog(@"我不認(rèn)識%@ 向下一個(gè)責(zé)任人傳遞",request.name);
        [self.successor handleRequest:request];
    }
}
@end
===================DutyTwo文件===================
#import "Handler.h"
@interface DutyTwo : Handler
@end


#import "DutyTwo.h"
@implementation DutyTwo
- (void)handleRequest:(Person *)request{
    if([request.name isEqualToString:@"ls"]){
        NSLog(@"李四我認(rèn)識");
    } else {
         NSLog(@"我不認(rèn)識%@ 向下一個(gè)責(zé)任人傳遞",request.name);
        [self.successor handleRequest:request];
    }
}
@end
===================DutyThrid文件===================
#import "Handler.h"
@interface DutyThrid : Handler
@end

#import "DutyThrid.h"
#import "Person.h"
@implementation DutyThrid
- (void)handleRequest:(Person *)request{
    if([request.name isEqualToString:@"ww"]){
        NSLog(@"王五我認(rèn)識");
    } else {
        NSLog(@"沒人認(rèn)識:%@",request.name);
    }
}
@end
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市瓤檐,隨后出現(xiàn)的幾起案子赂韵,更是在濱河造成了極大的恐慌,老刑警劉巖挠蛉,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件祭示,死亡現(xiàn)場離奇詭異,居然都是意外死亡谴古,警方通過查閱死者的電腦和手機(jī)绍移,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來讥电,“玉大人,你說我怎么就攤上這事轧抗《鞯校” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵横媚,是天一觀的道長纠炮。 經(jīng)常有香客問我,道長灯蝴,這世上最難降的妖魔是什么恢口? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮穷躁,結(jié)果婚禮上耕肩,老公的妹妹穿的比我還像新娘。我一直安慰自己问潭,他們只是感情好猿诸,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著狡忙,像睡著了一般梳虽。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上灾茁,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天窜觉,我揣著相機(jī)與錄音,去河邊找鬼北专。 笑死禀挫,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的逗余。 我是一名探鬼主播特咆,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了腻格?” 一聲冷哼從身側(cè)響起画拾,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎菜职,沒想到半個(gè)月后青抛,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡酬核,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年蜜另,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片嫡意。...
    茶點(diǎn)故事閱讀 39,690評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡举瑰,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蔬螟,到底是詐尸還是另有隱情此迅,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布旧巾,位于F島的核電站耸序,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏鲁猩。R本人自食惡果不足惜坎怪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望廓握。 院中可真熱鬧搅窿,春花似錦、人聲如沸隙券。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽是尔。三九已至殉了,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間拟枚,已是汗流浹背薪铜。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留恩溅,地道東北人隔箍。 一個(gè)月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像脚乡,于是被迫代替她去往敵國和親蜒滩。 傳聞我的和親對象是個(gè)殘疾皇子滨达,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評論 2 353

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