首页 > 代码库 > 责任链模式

责任链模式

应用情景


  责任链模式主要应用在对请求的处理上。当一个请求来临的时候,A、B、C都有可能去处理,由于A、B、C三者的能力不同,他们会更根据请求中携带的数据进行条件判断,如果满足自己的条件,才可以被自己处理,否则  需要由其他人处理。在这种情况下,我们可以使用if...else来处理请求,先进行条件判断,然后交给某人去处理。当然,更好的实现方式是使用责任链模式。将请求直接交给A,A自己进行条件判断,A如果发现自己处理不了,则将请求交给B,B再进行判断,以此类推。

类图关系


 

技术分享

Handler:抽象类,定义处理方法handleMessage;定义编排方法setNext来设置下一个处理者;定义每个具体的处理者处理级别以及具体处理任务

concreteHandler:继承抽象类,实现自己的处理任务

示例代码


在责任链中前一个对象可以消费(增删改)一部分请求信息后交给下一个对象也是可以的。

public abstract class Handler{    private Handler nextHandler;        public final Response handleMessage(Request request){        Response response = null;        //判断是否是自己的处理级别        if(this.getHandleLevel().equals(request.getRequestLevel())){            response = this.echo(request);        }else{            if(this.nextHandler != null)                response = nextHandler.handleMessage(request);            else{                //没有适当的处理者,业务自行处理            }        }        return response;    }        protected void setNext(Handler _handler){        this.nextHandler = _handler;    }        protected abstractLevell getHandleLevel();        protected abstract Response echo(Request request);}

 

责任链模式