24天学会设计模式------责任链模式
来源:互联网 发布:怎么禁用135端口 编辑:程序博客网 时间:2024/06/14 00:08
一、责任链模式(Chain of Responsibility Pattern)
1、简介
从名字上大概也能猜出这个模式的大概模样——系统中将会存在多个有类似处理能力的对象。当一个请求触发后,请求将在这些对象组成的链条中传递,直到找到最合适的“责任”对象,并进行处理。《设计模式》中给它的定义如下:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。从定义上可以看出,责任链模式的提出是为了“解耦”,以应变系统需求的变更和不明确性。
2、意图
使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。
3、适用性
有多个的对象可以处理一个请求,哪个对象处理该请求运行时刻自动确定。 你想在不明确指定接收者的情况下,向多个对象中的一个提交一个请求。 可处理一个请求的对象集合应被动态指定。
4、结构
责任链模式涉及到的角色如下所示:
●抽象处理者(Handler)角色:定义出一个处理请求的接口。如果需要,接口可以定义 出一个方法以设定和返回对下家的引用。这个角色通常由一个Java抽象类或者Java接口实现。
●具体处理者(ConcreteHandler)角色:具体处理者接到请求后,可以选择将请求处理掉,或者将请求传给下家。由于具体处理者持有对下家的引用,因此,如果需要,具体处理者可以访问下家。
二、使用范例
这里举了个加工资的问题,对于不同额度的加工资问题,应由不同级别的领导来解决。HR(无法解决工资问题,它只会向上报告)-》班长-》经理-》董事长
要求提高工资的类
解决工资问题的抽象类 然后就是各种用法了结果输出:
[要求提高工资50元的问题]由[组长kaka]解决了。
[要求提高工资100元的问题]由[组长kaka]解决了。
[要求提高工资150元的问题]由[经理bingbing]解决了。
[要求提高工资200元的问题]由[经理bingbing]解决了。
[要求提高工资250元的问题]由[经理bingbing]解决了。
[要求提高工资300元的问题]由[经理bingbing]解决了。
[要求提高工资350元的问题]由[经理bingbing]解决了。
[要求提高工资400元的问题]由[经理bingbing]解决了。
[要求提高工资450元的问题]由[经理bingbing]解决了。
[要求提高工资500元的问题]由[经理bingbing]解决了。
[要求提高工资550元的问题]由[董事长wenwen]解决了。
[要求提高工资600元的问题]由[董事长wenwen]解决了。
[要求提高工资650元的问题]由[董事长wenwen]解决了。
[要求提高工资700元的问题]由[董事长wenwen]解决了。
[要求提高工资750元的问题]由[董事长wenwen]解决了。
[要求提高工资800元的问题]由[董事长wenwen]解决了。
[要求提高工资850元的问题]由[董事长wenwen]解决了。
[要求提高工资900元的问题]由[董事长wenwen]解决了。
[要求提高工资950元的问题]由[董事长wenwen]解决了。
[要求提高工资1000元的问题]由[董事长wenwen]解决了。
[要求提高工资1050元的问题]无法解决
[要求提高工资1100元的问题]无法解决
[要求提高工资1150元的问题]无法解决
三、优缺点
1、优点:
(1)、降低耦合度。它将请求的发送者和接受者解耦。
(2)、简化了对象。使得对象不需要知道链的结构。
(3)、增强给对象指派职责的灵活性。通过改变链内的成员或者调动它们的次序,允许动态地新增或者删除责任。
(4)、增加新的请求处理类很方便。
2、缺点:
(1)、不能保证请求一定被接收。
(2)、系统性能将受到一定影响,而且在进行代码调试时不太方便;可能会造成循环调用。
(3)、可能不容易观察运行时的特征,有碍于除错。
林炳文Evankaka原创作品。转载请注明出处http://blog.csdn.net/evankaka/article/details/43210027
- 24天学会设计模式------责任链模式
- 24天学会设计模式------责任链模式
- 责任链设计模式
- 责任链设计模式
- 设计模式---责任链
- 责任链设计模式
- 设计模式----责任链
- 设计模式-责任链
- 责任链设计模式
- 责任链设计模式
- 设计模式:责任链
- [设计]责任链模式
- 设计模式--责任链
- 责任链设计模式
- 设计模式----责任链模式
- 【设计模式】责任链模式
- 设计模式---责任链模式
- 设计模式:责任链模式
- 机器学习(Machine Learning)&深度学习(Deep Learning)资料(Chapter 2)
- codeforces 822 C. Hacker, pack your bags!(思维+dp)
- 背包问题-LintCode
- Android butterknife view注入框架
- 正则表达式"\\s+"
- 24天学会设计模式------责任链模式
- BaseModel
- JavaScript事件委托的技术原理
- Scala JDBC 查询和更新MySQL
- Spring容器ApplicationContext实现和配置WebApplicationContext
- Eclipse中移除未使用的类引用的三种办法
- Java实现栈和队列
- Failed to instantiate [org.springframework.web.servlet.HandlerMapping]: Factory method 'webSocketHan
- Redis单线程模型