责任链设计模式
2018, Apr 20
责任链设计模式
责任链模式:让一个请求被多个对象处理
- 优点:请求和处理分开,解耦
- 缺点:链太长,会有性能问题
-
请求类:每个请求都有自己的级别
public class Request { //请求的等级 public Level getRequestLevel(){ return null; } }
-
级别类和处理类
public class Level { //定义一个请求和处理等级 } public class Response { //处理者返回的数据 }
-
抽象处理者:实现final必须的处理方法,声明下一任处理者变量,并提供set方法。定义抽象处理函数和抽象级别函数。
public abstract class Handler { private Handler nextHandler; //每个处理者都必须对请求做出处理 public final Response handleMessage(Request request){ Response response = null; //判断是否是自己的处理级别 if(this.getHandlerLevel().equals(request.getRequestLevel())){ response = this.echo(request); }else{ //不属于自己的处理级别 //判断是否有下一个处理者 if(this.nextHandler != null){ response = this.nextHandler.handleMessage(request); }else{ //没有适当的处理者,业务自行处理 } } return response; } //设置下一个处理者是谁 public void setNext(Handler _handler){ this.nextHandler = _handler; } //每个处理者都有一个处理级别 protected abstract Level getHandlerLevel(); //每个处理者都必须实现处理任务 protected abstract Response echo(Request request);
-
具体处理者
public class ConcreteHandler1 extends Handler { //定义自己的处理逻辑 protected Response echo(Request request) { //完成处理逻辑 return null; } //设置自己的处理级别 protected Level getHandlerLevel() { //设置自己的处理级别 return null; } }
测试函数
public class Client {
public static void main(String[] args) {
//声明所有的处理节点
Handler handler1 = new ConcreteHandler1();
Handler handler2 = new ConcreteHandler2();
Handler handler3 = new ConcreteHandler3();
//设置链中的阶段顺序1-->2-->3
handler1.setNext(handler2);
handler2.setNext(handler3);
//提交请求,返回结果
Response response = handler1.handlerMessage(new Request());
}
}