1 模式定义
职责链模式 (Chain of Responsibility Pattern): 避免请求发送者与接收者耦合在一起, 让多个对象都有可能接收请求将这些对象连接成一条链并且沿着这条链传递请求直到有对象处理它为止因为英文翻译的不同, 职责链模式又称为责任链模式, 它是一种对象行为型模式
2 模式结构
职责链模式包括例如以下角色:
Handler: 抽象处理者
ConcreteHandler: 详细处理者
Client: 客户类
3 模式分析
在职责链模式里, 非常多对象由每个对象对其下家的引用而连接起来形成一条链
请求在这条链上传递, 直到链上的某一个对象处理此请求为止
发出这个请求的 client 并不知道链上的哪一个对象终于处理这个请求, 这使得系统能够在不影响 client 的情况下动态地又一次组织链和分配责任
典型的抽象处理者代码:
- public abstract class Handler
- {
- protected Handler successor;
- public void setSuccessor(Handler successor)
- {
- this.successor=successor;
- }
- public abstract void handleRequest(String request);
- }
典型的详细处理者代码:
- public class ConcreteHandler extends Handler
- {
- public void handleRequest(String request)
- {
if(请求 request 满足条件)
- {
- ...... // 处理请求
- }
- else
- {
- this.successor.handleRequest(request); // 转发请求
- }
- }
- }
4 模式优缺点
职责链模式的长处
? 减少耦合度
? 可简化对象的相互连接
? 增强给对象指派职责的灵活性
? 添加新的请求处理类非常方便
职责链模式的缺点
不能保证请求一定被接收
系统性能将受到一定影响, 并且在进行代码调试时不太方便可能会造成循环调用
5 模式适用环境?
在下面情况下能够使用职责链模式:
有多个对象能够处理同一个请求, 详细哪个对象处理该请求由执行时刻自己主动确定
在不明白指定接收者的情况下, 向多个对象中的一个提交一个请求
可动态指定一组对象处理请求
来源: http://www.bubuko.com/infodetail-2497167.html