行為型之一-職責鏈模式

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

設計圖

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容