意图:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。
动机: 在软件构建过程中,一个请求可能被多个对象处理,但是每个请求在运行时只能有一个接受者,如果显式指定,将必不可少地带来请求发送者与接受者的紧耦合。
适用性:
有多个对象可以处理一个请求,哪个对象处理该请求运行时自动确定。
在不明确指定接收者的情况下,向多个对象中的一个提交一个请求。
可处理一个请求的对象集合应被动态指定
结构:
参与者:
Handler : 定义一个处理请求的接口;实现后继链
ConcreteHandler:处理它所负责的请求;可访问它的后继者;如果可处理该请求,就处理之;否则将该请求转发给它的后继者
ClientL向链上的具体矗立着对象提交请求。
协作:
当客户提交一个请求时,请求沿链传递直至有一个ConcreteHandler对象负责处理它。
效果:
降低耦合度,该模式使得一个对象无须知道是哪一个对象处理其请求。
增强了给对象指派职责的灵活性
不保证被接受,因为一个请求没有明确的接收者,那么就不能保证它一定会被处理
实现:
代码示例如下:
1 |
|