美文网首页
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