設計模式 責任鏈

2021-09-20 18:30:53 字數 2212 閱讀 3235

引用:《 objective-c程式設計之道 ios設計模式解析》

責任鏈模式:使多個物件都有機會處理請求,從而避免請求的傳送者和接收者之間發生耦合。此模式將這些物件連成一條鏈,從而沿著這條鏈傳遞請求,直到有乙個物件處理它為止。

責任鏈主要思想:很多物件引用了同一型別的另乙個物件,形成了一條鏈。鏈中每個物件實現了同樣的方法,處理對鏈中第乙個物件發起的請求。如果乙個物件不知道如何處理請求,它就把請求傳給下乙個響應器(successor)。

何時使用:

舉例:

#pragma 責任鏈

typedef ns_enum(nsinteger,requesttype)

;@inte***ce requestdemo :nsobject

@property(nonatomic,assign) requesttype type;

@end

@implementation requestdemo

@synthesize type;

@end

@inte***ce basechainhandler:nsobject

-(void)handlerequest:(requestdemo *)request;

@end

@implementation basechainhandler

-(void)handlerequest:(requestdemo *)request

@end

@inte***ce chainhandler_1:basechainhandler

@property(nonatomic,strong) __kindof basechainhandler *next;

@end

@implementation chainhandler_1

@synthesize next;

-(void)handlerequest:(requestdemo *)request

else

}@end

@inte***ce chainhandler_2:basechainhandler

@property(nonatomic,strong) __kindof basechainhandler *next;

@end

@implementation chainhandler_2

@synthesize next;

-(void)handlerequest:(requestdemo *)request

else

}@end

@inte***ce chainhandler_3:basechainhandler

@property(nonatomic,strong) __kindof basechainhandler *next;

@end

@implementation chainhandler_3

@synthesize next;

-(void)handlerequest:(requestdemo *)request

else

}@end

//測試:

requestdemo *requettest=[[requestdemo alloc]init];

requettest.type=type1;

//chain

basechainhandler *basec=[basechainhandler new];

chainhandler_1 *handler1=[chainhandler_1 new];

handler1.next=basec;

chainhandler_2 *handler2=[chainhandler_2 new];

handler2.next=handler1;

chainhandler_3 *handler3=[chainhandler_3 new];

handler3.next=handler2;

[handler3 handlerequest:requettest];

//結果:

2019-05-03 10:19:36.426527+0800 block[78391:8269889] 處理型別為1的請求

小結:

責任鏈中響應器負責處理單一功能,方便新增、刪除等後期維護,避免單個類**臃腫不方便維護。

設計模式 責任鏈

使用情況描述 某人向銀行借錢 借1w一下一般櫃員就可以解決,借2w一下一般經理就能解決,如果借更多就需要主管才能解決。這就是乙個責任鏈,根據條件的不同,分別進行複雜的邏輯運算。if,switch都可以進行這樣的操作,但是需要在每一層進行一次複雜的操作。責任鏈模式是一種物件的行為模式。在責任鏈模式裡,...

責任鏈設計模式

責任鏈的應用場景 簡單使用責任鏈模式拆分 servlet api 中的過濾器 模擬servlet中的request物件 desc模擬 servlet 中的 request 物件 模擬servlet中的response物件 desc模擬 servlet 中的 response 物件 過濾器抽象層 de...

責任鏈設計模式

責任鏈模式 responsibility pattern 是行為型設計模式之一。這種模型結構有點類似現實生活中鐵鍊,由乙個個鐵環首尾相接構成一條鏈,如果這種結構用在程式設計領域,則每個節點可以看做乙個物件,每個物件有不同的處理邏輯,將乙個請求從鏈的首端發出,沿著鏈的路徑依次傳遞每個節點物件,直到有物...