美文网首页
iOS中责任链设计模式的实现

iOS中责任链设计模式的实现

作者: 12345qwert | 来源:发表于2018-12-15 16:03 被阅读28次

前言

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


image.png

主要有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

相关文章

网友评论

      本文标题:iOS中责任链设计模式的实现

      本文链接:https://www.haomeiwen.com/subject/fosahqtx.html