目录
一、为什么使用职责链模式
假设某学校规定,学生请假要根据请假天数找不同的老师盖章,请假3天以下,班主任盖章,3~7天需要年级主任盖章,7天以上需要教导主任盖章。作为一个学生,我只需要向老师发出请假请求,不管是谁处理了该事件,将请求发送到该链上以后,请求在这条链上传递,直到某个对象将其处理,如try/catch语句。
职责链模式将请求的发送者和请求的处理者解耦。
二、模式定义
职责链模式(Chain of Responsibility Pattern):避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。由于英文翻译的不同,职责链模式又称为责任链模式,它是一种对象行为型模式。
三、模式结构
职责链模式包含如下角色:
• Handler: 抽象处理者
• ConcreteHandler: 具体处理者
• Client: 客户类
在职责链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这条链上传递,直到链上的某一个对象处理此请求为止。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织链和分配责任。
四、模式优点
•
降低耦合度
•
可简化对象的相互连接
•
增强给对象指派职责的灵活性
•
增加新的请求处理类很方便
五、模式缺点
•
不能保证请求一定被接收。
•
系统性能将受到一定影响,而且在进行代码调试时不太方便;可能会造成循环调用。
六、模式适用环境
在以下情况下可以使用职责链模式:
•
有多个对象可以处理同一个请求,
具体哪个对象处理该请求由运行时刻自动确定
。
•
在不明确指定接收者的情况下,
向多个对象中的一个提交一个请求
。
•
可
动态指定一组对象处理请求
。
七、模式应用实例
1、Java
中的异常处理机制
2、
早期的
Java AWT
事件模型
(JDK 1.0
及更早
)
事件浮升
(Event Bubbling)
机制
。