职责链模式
介绍
职责链模式避免请求发送者与接收者耦合在一起,让多个对象都有可能接受请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理为止
角色
- Handler(抽象处理者):一般设计为抽象类,定义了处理请求的接口和一个抽象处理者类型的对象作为对下家的引用
- ConcreteHandler(具体处理者):实现了抽象处理者定义的抽象处理请求方法,在处理之前需要判断是否可以处理,若不可以,则将请求转发给后继者
示例代码
//抽象处理者
public abstract class Handler {
//维持对下家的引用
protected Handler successor;
public void setSuccessor(Handler successor) {
this.successor = successor;
}
public abstract void handleRequest(String request);
}
//具体处理者A
public class ConcreteHandlerA extends Handler {
@Override
public void handleRequest(String request) {
if ("A".equalsIgnoreCase(request)) {
System.out.println("A Handler Request");
} else {
this.successor.handleRequest(request);
}
}
}
//具体处理者B
public class ConcreteHandlerB extends Handler {
@Override
public void handleRequest(String request) {
if ("B".equalsIgnoreCase(request)) {
System.out.println("B Handler Request");
} else {
this.successor.handleRequest(request);
}
}
}
//客户端
public class Client {
public static void main(String[] args) {
Handler handlerA, handlerB;
handlerA = new ConcreteHandlerA();
handlerB = new ConcreteHandlerB();
//创建职责链
handlerA.setSuccessor(handlerB);
handlerA.handleRequest("A");
handlerA.handleRequest("B");
}
}