责任链模式
概念
责任链模式是为一个请求创建一条处理者调用链,在该链中,处理者保存下一个处理者的引用。当一个处理者不能执行该请求的时候,它会把请求交给下一个下一个处理者,如此类推。
优点
- 请求和处理两个处理相互解耦。
- 可以动态的添加处理者。
缺点
- 请求到链表最后,都没有处理者能处理。
- 可能导致循环引用。
UML图
Handler(抽象处理者):定义一个处理请求的接口
ActuallyHandlerN(实际处理者):实现处理请求的接口。
部分代码部分:
Handler:
public abstract class Handler {
protected Handler nextHandler; // 下一个责任链成员
public Handler getNextHandler() {
return nextHandler;
}
public void setNextHandler(Handler nextHandler) {
this.nextHandler = nextHandler;
}
// 处理传递过来的时间
public abstract void HandleRequest(int type);
}
ActuallyHandlerN:
public class ActuallyHandler1 extends Handler {
@Override
public void HandleRequest(int type) {
if (type == 1) {
System.out.println("ActuallyHandler1解决了问题!");
} else {
System.out.println("ActuallyHandler1解决不了问题......");
if (nextHandler != null) {
nextHandler.handleMessage(type);
} else {
System.out.println("没有人能处理这个消息");
}
}
}
}
public class ActuallyHandler2 extends Handler {
@Override
public void HandleRequest(int type) {
if (type == 2) {
System.out.println("ActuallyHandler2解决了问题!");
} else {
System.out.println("ActuallyHandler2解决不了问题......");
if (nextHandler != null) {
nextHandler.handleMessage(type);
} else {
System.out.println("没有人能处理这个消息");
}
}
}
}
public class ActuallyHandler3 extends Handler {
@Override
public void HandleRequest(int type) {
if (type == 3) {
System.out.println("ActuallyHandler3解决了问题!");
} else {
System.out.println("ActuallyHandler3解决不了问题......");
if (nextHandler != null) {
nextHandler.handleMessage(type);
} else {
System.out.println("没有人能处理这个消息");
}
}
}
}