前言
责任链设计模式的框图如下:

主要有4个要点:
1.做一个basicHandler,在.h文件暴露处理实践接口handleRequest。
2.在basicHandler中定义successor字段,用于指定责任链传递过程中具体的处理者。
3.具体处理事件的handler继承自basicHandler。如果传递过来的事件能处理则处理,如果处理不掉就传递给自己的successor。
4.责任链末尾的handler如果无法处理事件,则抛回给super,即basic handler。
代码示范
// main.m
// ChainOfResponsibilityPattern
//
// Created by hushunfeng on 2018/12/15.
// Copyright © 2018 cmcc. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "Handler1.h"
#import "Handler2.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
Handler1 *handler1 = [[Handler1 alloc] init];
Handler2 *handler2 = [[Handler2 alloc] init];
//绑定责任链
handler1.successor = handler2;
handler2.successor = nil;//handler2作为责任链的尾端
NSString *event1 = @"need handler1 handle";
NSString *event2 = @"need handler2 handle";
NSString *event3 = @"need handler3 handle";
//handler1作为责任链的第一个handler
[handler1 handleEvent:event1];
[handler1 handleEvent:event2];
[handler1 handleEvent:event3];
}
return 0;
}
//
// Handler1.h
// ChainOfResponsibilityPattern
//
// Created by hushunfeng on 2018/12/15.
// Copyright © 2018 cmcc. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "BasicHandler.h"
NS_ASSUME_NONNULL_BEGIN
@interface Handler1 : BasicHandler
@end
NS_ASSUME_NONNULL_END
//
// Handler1.m
// ChainOfResponsibilityPattern
//
// Created by hushunfeng on 2018/12/15.
// Copyright © 2018 cmcc. All rights reserved.
//
#import "Handler1.h"
@implementation Handler1
- (void)handleEvent:(NSString *)event {
//先判断是否能处理,能处理则处理,不能处理则交给下一个handler去处理
if ([event containsString:@"handler1"]) {
NSLog(@"handler1 handle");
}
else {
if (self.successor) {//判断是否是最后一个处理者
[self.successor handleEvent:event];
}
else {
[super handleEvent:event];
}
}
}
@end
//
// Handler2.h
// ChainOfResponsibilityPattern
//
// Created by hushunfeng on 2018/12/15.
// Copyright © 2018 cmcc. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "BasicHandler.h"
@interface Handler2 : BasicHandler
@end
//
// Handler2.m
// ChainOfResponsibilityPattern
//
// Created by hushunfeng on 2018/12/15.
// Copyright © 2018 cmcc. All rights reserved.
//
#import "Handler2.h"
@implementation Handler2
- (void)handleEvent:(NSString *)event {
//先判断是否能处理,能处理则处理,不能处理则交给下一个handler去处理
if ([event containsString:@"handler2"]) {
NSLog(@"handler2 handle");
}
else {
if (self.successor) {//判断是否是最后一个处理者
[self.successor handleEvent:event];
}
else {
[super handleEvent:event];
}
}
}
@end
最后
demo工程下载地址:https://github.com/PizhuLoveCode/blogCode/tree/master/ChainOfResponsibilityPattern
网友评论