public abstract class Handler {
protected Handler next;
public Handler(Handler next) {
this.next = next;
}
public abstract void handle(Request request);
}
public class ConcreteHandlerA extends Handler {
public ConcreteHandlerA(Handler next) {
super(next);
}
@Override
public void handle(Request request) {
if (request.getType() == RequestType.TYPE_A) {
System.out.println("ConcreteHandlerA handles the request.");
} else if (next != null) {
next.handle(request);
}
}
}
public class ConcreteHandlerB extends Handler {
public ConcreteHandlerB(Handler next) {
super(next);
}
@Override
public void handle(Request request) {
if (request.getType() == RequestType.TYPE_B) {
System.out.println("ConcreteHandlerB handles the request.");
} else if (next != null) {
next.handle(request);
}
}
}
public class ConcreteHandlerC extends Handler {
public ConcreteHandlerC(Handler next) {
super(next);
}
@Override
public void handle(Request request) {
if (request.getType() == RequestType.TYPE_C) {
System.out.println("ConcreteHandlerC handles the request.");
} else if (next != null) {
next.handle(request);
}
}
}
public class Request {
private RequestType type;
public Request(RequestType type) {
this.type = type;
}
public RequestType getType() {
return type;
}
}
public enum RequestType {
TYPE_A,
TYPE_B,
TYPE_C
}
public class ChainDemo {
public static void main(String[] args) {
Handler handlerChain = new ConcreteHandlerC(new ConcreteHandlerB(new ConcreteHandlerA(null)));
Request request1 = new Request(RequestType.TYPE_A);
handlerChain.handle(request1);
Request request2 = new Request(RequestType.TYPE_B);
handlerChain.handle(request2);
Request request3 = new Request(RequestType.TYPE_C);
handlerChain.handle(request3);
}
}
在上面的示例中, Handler 是一个抽象类,它有一个指向下一个处理程序的引用 next,并且有一个 handle() 方法,该方法接受 Request 对象并处理它。 ConcreteHandlerA,ConcreteHandlerB 和 ConcreteHandlerC 是三个具体的处理程序,它们实现了 Handler 类,并覆盖了 handle() 方法。在每个处理程序中,它们首先检查请求是否与它们匹配,如果匹配,则处理请求;否则,将请求传递给下一个处理程序。 Request 类包含一个枚举类型 RequestType,表示请求的类型。 ChainDemo 类是一个包含 main() 方法的类,它创建一个责任链,将三个请求分别传递给责任链,并观察每个请求是如何处理的。
此Java代码示例展示了责任链模式的使用,Handler是抽象处理程序,有next引用和handle方法。ConcreteHandlerA、B、C是具体处理类,处理特定类型的Request。Request类包含RequestType枚举,表示请求类型。ChainDemo创建了一个处理链,处理不同类型请求。
537

被折叠的 条评论
为什么被折叠?



