Chain of Responsibility(職責鏈模式)
使多個對象都有機會處理請求,從而避免請求的發送者和接收者之間的耦合關系。將這個對象連成一條鏈,并沿著這條鏈傳遞該請求,直到有一個對象處理它為止。
iOS事件的傳遞和響應就是職責鏈模式的實現。
VC.m
HCDCommonManager *common = [[HCDCommonManager alloc]initWithName:@"經理"];
HCDMajorManager *majon = [[HCDMajorManager alloc]initWithName:@"總監"];
HCDGenaralManager *genaral = [[HCDGenaralManager alloc]initWithName:@"總經理"];
common.superior = majon;
majon.superior = genaral;
HCDReuquest *request = [[HCDReuquest alloc]init];
request.requestType = @"請假";
request.number = 5;
[common dealRequest:request];
request.number = 20;
[common dealRequest:request];
request.number = 220;
[common dealRequest:request];
request.number = 1200;
[common dealRequest:request];
HCDMnager.h
@interface HCDMnager : NSObject
@property(nonatomic,copy)NSString *name;
@property(nonatomic,strong)HCDMnager *superior;
-(instancetype)initWithName:(NSString *)name;
-(void)dealRequest:(HCDReuquest *)request;
@end
HCDMnager.m
@implementation HCDMnager
-(instancetype)initWithName:(NSString *)name{
self = [super init];
if (self) {
_name = name;
}
return self;
}
-(void)dealRequest:(HCDReuquest *)request{
}
@end
HCDCommonManager.m
@implementation HCDCommonManager
-(void)dealRequest:(HCDReuquest *)request{
if ([request.requestType isEqualToString:@"請假"] && request.number < 10) {
NSLog(@"%@處理了%@,時間是%ld",self.name,request.requestType,request.number);
}else{
[self.superior dealRequest:request];
}
}
@end