责任链模式简介:
责任链模式是行为设计模式之一,使对个对象都有机会处理请求,从而避免了请求的发送者和接受者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递请求,直到对象处理它为止。
责任链模式使用场景:
1. 多个对象可以处理同一请求,但是具体由那个对象处理则在运动时动态决定。
2. 在请求处理者不明确的情况下向多个对象中的一个提交请求。
3. 需要动态指定一组对象处理请求的
UML图
具体使用实例:
//抽象请求者
public abstract class AbstractRequest {
/**
* 权限
* @return
*/
public abstract int getRequestLevel();
}
//处理者具体实例
//抽象处理者
public abstract class AbstractHandler {
/**
* 下一个处理对象
*/
public AbstractHandler mNextHandler;
public abstract void handleRequest(AbstractRequest request);
public abstract int handleRequestLevel();
}
public class ConcreteHandler1 extends AbstractHandler {
@Override
public void handleRequest(AbstractRequest request) {
//请求者的请求的级别
int level = request.getRequestLevel();
if (level <= handleRequestLevel()) {
System.out.println("ConcreteHandler1 处理请求!");
} else {
mNextHandler.handleRequest(request);
}
}
@Override
public int handleRequestLevel() {
return 2000;
}
}
public class ConcreteHandler2 extends AbstractHandler {
@Override
public void handleRequest(AbstractRequest request) {
//请求者任务的级别
int level = request.getRequestLevel();
if (level <= handleRequestLevel()) {
System.out.println("ConcreteHandler2 处理请求");
} else {
mNextHandler.handleRequest(request);
}
}
@Override
public int handleRequestLevel() {
return 5000;
}
}
//请求者具体实例
public class ConcreteRequest1 extends AbstractRequest {
@Override
public int getRequestLevel() {
return 200;
}
}
public class ConcreteRequest2 extends AbstractRequest {
@Override
public int getRequestLevel() {
return 2020;
}
}
//实际调用场景
public static void main(String[] args) {
//创建处理者1链条
ConcreteHandler1 handler1 = new ConcreteHandler1();
//创建处理者2链条
ConcreteHandler2 handler2 = new ConcreteHandler2();
//串联链条
handler1.mNextHandler = handler2;
//请求者1
ConcreteRequest1 request1 = new ConcreteRequest1();
//请求者2
ConcreteRequest2 request2 = new ConcreteRequest2();
//从handler1开始处理
handler1.handleRequest(request1);
handler1.handleRequest(request2);
}