将多个对象组成一条职责链,然后按照它们在职责链上的顺序一个一个地找出到底应该谁来负责处理。
示例
当一个人被要求做什么事情时,如果他可以做就自己做,如果不能做就将“要求”转给另外一个人。下一个人如果可以自己处理,就自己做;如果也不能自己处理,就再转给另外一个人…
类图
时序图
Trouble类
1 | public class Trouble { |
Support类
1 | public abstract class Support { |
NoSupport类
1 | public class NoSupport extends Support { |
LimitSupport类
1 | public class LimitSupport extends Support { |
OddSupport类
1 | public class OddSupport extends Support { |
SpecialSupport类
1 | public class SpecialSupport extends Support { |
Main类
1 | public class Main { |
运行结果
1 | [Trouble 0] is resolved by [Bob]. |
登场角色
Handler(处理者)
Handler角色定义了处理请求的接口(API)。Handler角色知道“下一个处理者”是谁,如果自己无法处理请求,它会将请求转给“下一个处理者”。当然,“下一个处理者”也是Handler角色。在示例程序中,由Support类扮演此角色。负责处理请求的是support方法。
ConcreteHandler(具体的处理者)
ConcreteHandler角色是处理请求的具体角色。在示例程序中,由NoSupport、LimitSupport、OddSupport、SpecialSupport等各个类扮演此角色。
Client(请求者)
Client角色是向第一个ConcreteHandler角色发送请求的角色。在示例程序中,由Main类扮演此角色。