文档章节

设计模式-责任链模式

 没懂
发布于 2016/07/29 16:45
字数 784
阅读 9
收藏 0

精选30+云产品,助力企业轻松上云!>>>

模式定义:使多个对象都有计划处理请求,从而避免请求的发送者和接受者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。

@interface Request: NSObject
@property (nonatomic, copy)NSString *type;
@property (nonatomic, assign)int number;

@end
@implementation Request

@end

@interface Manager : NSObject
@property (nonatomic, copy)NSString *name;
@property (nonatomic, strong)Manager *superior;
@property (nonatomic, strong)Request *req;
- (instancetype)initWithName:(NSString *)name;
- (void)dealRequest:(Request *)request;
@end
@implementation Manager
- (instancetype)initWithName:(NSString *)name
{
    if (self = [super init]) {
        _name = name;
    }
    return self;
}
- (void)dealRequest:(Request *)request
{
    NSException *e = [NSException exceptionWithName:@"override Method dealRequest" reason:@"Must implement dealRequest" userInfo:nil];
    @throw e;
}
@end

@interface LowManger : Manager

@end
@implementation LowManger
-(void)dealRequest:(Request *)request
{
    if ([request.type isEqualToString:@"请假"]&&request.number < 20) {
        NSLog(@"小假,班主任同意了");
    }else
    {
        [self.superior dealRequest:request];
    }
}

@end

@interface MainManger : Manager

@end
@implementation MainManger
-(void)dealRequest:(Request *)request
{
    if ([request.type isEqualToString:@"请假"]&&request.number < 50) {
        NSLog(@"想了一会儿,主任同意了");
    }else
    {
        [self.superior dealRequest:request];
    }
}

@end

@interface DestroyManger : Manager

@end
@implementation DestroyManger
-(void)dealRequest:(Request *)request
{
    if ([request.type isEqualToString:@"请假"]&&request.number < 80) {
        NSLog(@"想了半天,校长同意了");
    }else
    {
        NSLog(@"卧槽,管不了了");
    }
}

@end


int main(int argc, const char * argv[]) {
    @autoreleasepool {
        Request *req = [[Request alloc]init];
        req.type= @"请假";
        req.number = 10;

        // 责任链条
        LowManger *manger = [[LowManger alloc]init];
        MainManger *mainManger = [[MainManger alloc]init];
        DestroyManger *desManger = [[DestroyManger alloc]init];
        manger.superior = mainManger;
        mainManger.superior = desManger;

        [manger dealRequest:req];
        req.number = 30;
        [manger dealRequest:req];
        req.number = 60;
        [manger dealRequest:req];
        req.number = 90;
        [manger dealRequest:req];
    }
    return 0;
}

模式的优点:

 1.请求者和接受者松散耦合

在责任链模式中,请求者并不知道接受者是谁,也不知道具体如何处理请求者只负责向责任链发出请求就可以了,而每个职责对象也不用管请求者或者是其他的职责对象,只负责处理自己的部分,其他的就交给其他的职责对象去处理。也就是说,请求者  和接受者是完全接偶的。

 2.动态组合职责

 责任链模式会把功能处理分散到单独的职责对象中,然后在使用的时候,就可以动态组合职责形成职责链,从而可以灵活地给对象分配职责,也可以灵活地实现和改变对象的职责。

模式的缺点:

 1.产生许多细粒度对象

 责任链模式会把功能处理分散到单独的职责对象中,也就是每个职责对象处理一个方面的功能,要把一个业务处理完,需要许多职责对象的组合,这样会产生大量的细粒度职责对象。

2.不一定能被处理

 责任链模式的每个职责对象只负责处理自己处理的那部分,因此可能会出现某个请求,把整个责任链传递完也没有职责对象处理它。这就需要在使用责任链的时候,需要提供默认的处理,并且注意构建链的有效性

粉丝 0
博文 8
码字总数 4915
作品 0
徐汇
私信 提问
加载中
请先登录后再评论。
Tomcat 系统架构与设计模式,第 2 部分: 设计模式分析

门面设计模式 门面设计模式在 Tomcat 中有多处使用,在 Request 和 Response 对象封装中、Standard Wrapper 到 ServletConfig 封装中、ApplicationContext 到 ServletContext 封装中等都用到...

张升强
2014/12/10
29
0
Tomcat 系统架构与设计模式_ 设计模式分析

门面设计模式 门面设计模式在 Tomcat 中有多处使用,在 Request 和 Response 对象封装中、Standard Wrapper 到 ServletConfig 封装中、ApplicationContext 到 ServletContext 封装中等都用到...

lvzjane
2014/11/03
124
0
101JAVA设计模式--业务逻辑实现扩展,框架使用分析总结

23中设计模式目录如下: 工厂模式 抽象工厂模式 单例模式 建造者模式 原型模式 适配器模式 桥接模式 过滤器模式 组合模式 装饰器模式 外观模式 享元模式 代理模式 责任链模式 命令模式 解释器...

osc_h9x23mw1
2019/12/07
7
0
Tomcat 系统架构与设计模式,第 2 部分: 设计模式分析

门面设计模式 门面设计模式在 Tomcat 中有多处使用,在 Request 和 Response 对象封装中、Standard Wrapper 到 ServletConfig 封装中、ApplicationContext 到 ServletContext 封装中等都用到...

yldjoy
2014/05/13
3
0
走进JavaWeb技术世界7:Tomcat中的设计模式

。 门面设计模式 门面设计模式在 Tomcat 中有多处使用,在 Request 和 Response 对象封装中、Standard Wrapper 到 ServletConfig 封装中、ApplicationContext 到 ServletContext 封装中等都用...

osc_03aaqmm8
2019/08/16
4
0

没有更多内容

加载失败,请刷新页面

加载更多

你看起来很好吃

你看起来很好吃 本文分享自微信公众号 - ZackSock(ZackSock)。 如有侵权,请联系 support@oschina.cn 删除。 本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。...

ZackSock
2019/10/25
19
0
Python绘制日历图和热力图

日历热力图 实现某商店2018年10月1号至2019年3月1号期间每一天盈利额(产生5000至30000区间的随机数)的数据可视化。 要求在鼠标放置每个单元格上时显示具体日期和对应数据 import datetime ...

气象学家公众号
07/03
10
0
#乔布简历#计协纳新季福利!乔布简历20元会员卡免费送

#乔布简历#计协纳新季福利!@乔布简历 20元会员卡免费送!活动规则:1)转发本微博/说说@ 三个好友;2)搜索关注“乔布堂”微信公众号,回复“BC016@你的QQ号”;截图发给计协微信公众号:j...

若川
2014/09/22
0
0
第十一届蓝桥第一场省赛题 走方格

走方格 问题描述: 在平面上有一些二维的点阵。这些点的编号就像二维数组的编号一样。从上到下依次为第 1 至第 n 行,从左到右依次为第 1 至第 m 列,每一个点可以用行号和列号来表示。现在有...

osc_kf7nv2km
16分钟前
26
0
HTTP/2协议之Stream【原理笔记】

前言 前面三篇介绍了HPPT/2的“连接前言”、“二进制桢”、“头部压缩”。本文从“流及多路复用”、“流状态”、“流量控制”、“流优先级”、“HTTP/2扩展”介绍HTTP/2协议流相关知识。 一、...

瓜农老梁
05/31
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部