【java设计模式】之 责任链(chain of resposibility)模式
来源:互联网 发布:淘宝的试用报告怎么写 编辑:程序博客网 时间:2024/05/22 09:09
责任链模式,顾名思义,就是一条链。这个链到底是怎么运行的呢?它主要是将能够处理同一类请求的对象连成一条链,所提交的请求沿着链传递,链上的对象逐个判断是否有能力处理该请求,如果能则处理,如果不能则传递给链上的下一个对象进行处理,以此类推。
比如说公司请假需要审批,举个不恰当的例子,如果请假小于3天,主管审批;3-10天的,经理审批;10-30天的,总经理审批;超过30天的,不批准等等。这就得一步步去判断,如果撇开设计模式不看的话,那么我们可以使用if…else…把它解决了,但是问题可想而知,实际中的复杂程度时远远超过这个例子的。
下面使用责任链模式来实现一下这个场景,先来看一下它们之间的关系结构:
Leader是个抽象类,里面有个方法是获取下一个Leader,Director、Manager和GeneralManager分别继承这个抽象类。LeaveRequest中封装了请假的相关信息。下面来实现一下这个责任链模式。
首先是封装请假信息的类:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
然后就是定义Leader这个抽象类了
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
主管、经理和总经理都需要继承该类,并实现处理请假的这个方法。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
由此可见,他们处理请求的条件是不同的,而且只要不是自己处理范围之内的,就会将请求传给链上的下一位来处理。接下来写个客户端模拟下:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
运行结果:
请假天数过多,主任张三没法处理
请假天数过多,经理李四没法处理
员工倪升武请假15天,理由:在家睡觉
总经理王五审批通过
在实际中,设置这个链可以放到配置文件中,可以直接修改配置文件即可,这个责任链模式扩展性也很好,比如现在有个副经理,专门处理10-20天的请假,那么我只要新添加一个副经理类即可,然后在责任链上配置一下就行了,对其他的类没有影响。
责任链模式使用的地方很多,比如我们常见的try…catch…就是,可以有多个catch,一个个往下判断;再比如servlet里面的过滤器,就是一个责任链;再比如struts2中的拦截器,也是使用的责任链模式。
—–乐于分享,共同进步!
—–我的博客主页:http://blog.csdn.net/eson_15
- java设计模式-责任链模式(Chain Of Resposibility)
- 【java设计模式】之 责任链(chain of resposibility)模式
- 【java设计模式】之 责任链(chain of resposibility)模式
- 责任链模式(Chain of Resposibility)
- java设计模式之责任链模式(Chain of Resposibility Pattern)
- 设计模式学习与实践(二十三)----责任链模式(chain of resposibility)
- 设计模式之责任链模式(Chain of Responsibity)
- 设计模式之---责任链模式(Chain of Responsibility)
- 设计模式之责任链模式(Chain of Responsibility)
- Java设计模式----责任链模式(Chain of Responsibility)
- 【行为型模式】责任链模式(chain of responsibility)之23种java设计模式
- Java设计模式之责任链模式(Chain of Responsibility模式)介绍
- 设计模式之责任链(Chain of Responsibility)
- 设计模式之-责任链(Chain of responsibility )
- (Boolan)C++设计模式 <十一> ——组合模式(Composite)、迭代器(Iterator)和责任链(Chain of Resposibility)
- Java开发中的23种设计模式之十七:责任链模式(Chain of Responsibility)
- Java设计模式之--责任链模式(Chain of Responsibility)
- 设计模式之责任链Chain of Responsibility模式
- Java 网络IO编程总结(BIO、NIO、AIO均含完整实例代码)
- 【java设计模式】之 策略(strategy)模式
- 在程序中鼠标的监听器对用户的行为做出反应
- 苹果大力扩张Apple Pay 即将在韩国等地推出
- mybatis配置文件实现数据库带下横线字段与实体类属性一致的映射
- 【java设计模式】之 责任链(chain of resposibility)模式
- Java多线程(二)
- java enum(枚举)使用详解 + 总结
- 导入csv到数据库,并且传递参数
- 一小时包教会 —— webpack 入门指南
- 按钮添加呼吸灯效果
- 51nod 1003 阶乘后面0的数量
- Qt将数字转为中文大写金额
- [UVa 12166] 修改天平(Equilibrium Mobile)