美文网首页
iOS必备设计模式-责任链

iOS必备设计模式-责任链

作者: MR_詹 | 来源:发表于2019-05-07 15:27 被阅读0次

设计模式-责任链

作用:

  • 解耦消息的发送者和接送者
  • 让多个对象有机会处理某个请求(比如:流式业务流程(OA))

实现:

  • 为某个请求创建一个对象链,每个对象依次检查次请求并对其进行处理,或者将它传递给链中的下一个对象
  • 链的实现:使用现成的链(如继承关系)或者自己实现新联(next指针)
  • 链上的每个对象都采用同样的接口处理或者上抛事件

实例:

image.png
创建基础的链对象

#import <Foundation/Foundation.h>


@class BusinessObject;
typedef void (^CompletionBlock)(BOOL handled);
typedef void (^ResultBlock)(BusinessObject *handler,BOOL handled);


@interface BusinessObject : NSObject
/* 下一个响应者(响应链构成的关键) **/
@property (nonatomic, strong, readwrite) BusinessObject *nextBusiness;

/* 响应者的处理方法 **/
- (void)handle:(ResultBlock)result;
/* 各个业务在该方法当中做实际业务处理 **/
- (void)handleBusiness:(CompletionBlock)completion;


@end
#import "BusinessObject.h"

@implementation BusinessObject

/* 响应者的处理方法 **/
- (void)handle:(ResultBlock)result
{
    CompletionBlock completion = ^(BOOL handled) {
        // 当前业务处理掉,上抛结果
        if (handled) {
            result(self,handled);
        }
        else{
            // 沿着责任链,指派给下一个业务处理
            if (self.nextBusiness) {
                [self.nextBusiness handle:result];
            }
            else{
                // 没有业务处理,上抛
                result(nil,NO);
            }
        }
    };
    
    // 当前业务请求
    [self handleBusiness:completion];
}


/* 各个业务在该方法当中做实际业务处理 **/
- (void)handleBusiness:(CompletionBlock)completion
{
    /*
        业务逻辑处理
        如网络请求、本地照片查询等
     */
}

@end
新建三个类,都继承于基础类BusinessObject,并重写handleBusiness方法,实现对应的业务

#import "BusinessObject.h"

NS_ASSUME_NONNULL_BEGIN

@interface BusinessObjectA : BusinessObject

@end

NS_ASSUME_NONNULL_END


#import "BusinessObjectA.h"

@implementation BusinessObjectA


- (void)handleBusiness:(CompletionBlock)completion {
    NSLog(@"执行A业务");
    completion(NO);
}


@end

修改前的业务流:a-b-c


image.png

修改后的业务流:c-b-a


image.png

相关文章

网友评论

      本文标题:iOS必备设计模式-责任链

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