设计模式 职责链模式
职责链模式(Chain of Responsibility):避免请求发送者与请求接收者耦合在一起,让多个对象都有可能接收到请求,将这些对象连接成一条链,并且沿着这条链传递请求,知道有对象处理它为止。又称为责任链模式,它是一种对象行为型模式。
模式动机:
职责链可以使一条是直线、一个环或者一个树形结构,脸上的每一个对象都是请求的处理者,职责链模式可以将请求的处理者组织成一条链,并使请求沿着链传递,有脸上的处理者对请求进行相应的处理,客户端无需关心请求的处理细节以及请求的传递,只需将请求发送到链上即可。将请求的发送者和请求的处理者解耦,这就是职责链的模式动机。
模式结构:
- Handler:抽象处理者
- ConcreteHandler:具体处理者
- Client:客户类
模式分析:
很多对象由每一个对象对其下家的引用而连接起来形成一条链,发出这个请求的客户端并不知道来年上的哪一个对象最终处理了这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织链和分配责任。
具体类图:
类图解析:Leader是一个抽象处理者,Director、Manager、GeneralManager继承自它,Leader包含自身为对象属性successor,表示上级属性,Leader引用LeaveRequest类,关系为处理。
关键代码实现:接收者先判断自己是否能够处理,如果不能处理则交给自己的上级处理
职责链模式优缺点:
优点:
- 降低耦合
- 简化对象的相互联系
- 增强对象指派责任的灵活性
- 增加新的请求处理类很方便
缺点
- 不能保证请求一定被接收
- 系统性能受到一定影响,可能陷入死循环