在责任链模式中,有三个主要角色:
1. 抽象处理者(Handler): 定义了处理请求的接口,通常包含一个指向下一个处理者的引用。
public abstract class Handler {
protected Handler successor; // 下一个处理者
public void setSuccessor(Handler successor) {
this.successor = successor;
}
public abstract void handleRequest(int request);
}
2. 具体处理者(ConcreteHandler): 实现了抽象处理者接口,负责处理请求。如果自己不能处理,则将请求传递给下一个处理者。
public class ConcreteHandler1 extends Handler {
@Override
public void handleRequest(int request) {
if (request <= 10) {
System.out.println("ConcreteHandler1 handles the request: " + request);
} else if (successor != null) {
successor.handleRequest(request);
}
}
}
public class ConcreteHandler2 extends Handler {
@Override
public void handleRequest(int request) {
if (request > 10 && request <= 20) {
System.out.println("ConcreteHandler2 handles the request: " + request);
} else if (successor != null) {
successor.handleRequest(request);
}
}
}
3. 客户端代码: 创建责任链,并将请求发送给链的第一个处理者。
public class Client {
public static void main(String[] args) {
// 构建责任链
Handler handler1 = new ConcreteHandler1();
Handler handler2 = new ConcreteHandler2();
handler1.setSuccessor(handler2);
// 发送请求
handler1.handleRequest(5);
handler1.handleRequest(15);
handler1.handleRequest(25);
}
}
在这个例子中,客户端创建了两个具体处理者,并将它们构建成一个责任链。客户端通过调用责任链的第一个处理者来发送请求。每个处理者根据自己的条件判断是否能够处理请求,如果能够处理,则进行处理;否则,将请求传递给下一个处理者。这样,请求就会在责任链上传递,直到有一个处理者能够处理它。责任链模式使得请求发送者无需知道具体的处理者是谁,从而实现了请求发送者和处理者的解耦。
转载请注明出处:http://www.zyzy.cn/article/detail/13950/设计模式