定义
使多个对象都有机会处理请求,从而避免了请求的发送者和接受者之前的耦合,将这些对象连成一条链,并沿着这条链传递该请求,直到有对象处理它为止。
使用场景
- 多个对象可以处理同一请求,但具体由哪个对象则在运行时决定。
- 在请求处理者不明确的情况下,向多个对象中的一个提交一个请求。
- 需要动态指定一组对象处理请求。
Java 代码示例
public abstract class Handler {
// 下一节点的处理者
protected Handler successor;
public abstract void handleRequest(String condition);
}
public class Handler1 extends Handler {
@Override
public void handleRequest(String condition) {
if ("handler1".equals(condition)) {
// TODO: handle
} else {
successor.handleRequest(condition);
}
}
}
public class Handler2 extends Handler {
@Override
public void handleRequest(String condition) {
if ("handler2".equals(condition)) {
// TODO: handle
} else {
successor.handleRequest(condition);
}
}
}
public class Client {
public static void main(String[] args) {
Handler1 handler1 = new Handler1();
Handler2 handler2 = new Handler2();
handler1.successor = handler2;
handler2.successor = handler1;
handler1.handleRequest("handle2");
}
}