java 行为模式 责任链模式

来源:互联网 发布:java教程电子书下载 编辑:程序博客网 时间:2024/05/22 00:19

责任链模式

意图:

使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止

适用性: 

有多个的对象可以处理一个请求,哪个对象处理该请求运行时刻自动确定。 你想在不明确指定接收者的情况下,向多个对象中的一个提交一个请求。可处理一个请求的对象集合应被动态指定。 

责任链模式的构成

1 传递者接口(Handler):定义一个处理请求的接口,实现链中下一个对象(可选)
2 具体传递者(ConcreteHandler):可以访问链中下一个对象,如果可以处理请求,就处理它,否则将请求转发给后继者
3 客户端(Client):向链中的对象发出请求


UML

 




 责任链模式的要点主要是:

  1、有多个对象共同对一个任务进行处理。

  2、这些对象使用链式存储结构,形成一个链,每个对象知道自己的下一个对象。

  3、一个对象对任务进行处理,可以添加一些操作后将对象传递个下一个任务。也可以在此对象上结束任务的处理,并结束任务。

  3、客户端负责组装链式结构,但是客户端不需要关心最终是谁来处理了任务。

public abstract class Handler {    //下一级责任链    public Handler handler;    //设置下一级责任链    public void setSuccessor(Handler handler){        this.handler=handler;    }    public abstract void request(int request);}

public class ConcreteHandler1 extends Handler {    @Override    public void request(int request) {        if(request<10){            System.out.println("我是handler1,我处理了请求:"+request);        }else {            this.handler.request(request);        }    }}

public class ConcreteHandler2 extends Handler {    @Override    public void request(int request) {        if(request>10){            System.out.println("我是handler2,我处理了请求:"+request);        }else {            System.out.println("请求"+request+"没人能处理");        }    }}

public class Client {    public static void main(String[] args) {               //创建处理器        Handler handler1=new ConcreteHandler1();        Handler handler2=new ConcreteHandler2();               //客户端创建处理器的关联,形成链        handler1.setSuccessor(handler2);               //创建任务,此处为一些数字,不同大小,处理器处理结果不同        int[] requests={4,10,59,2,16};               //调用处理器处理                for(int request:requests){            handler1.request(request);        }    }}
我是handler1,我处理了请求:4请求10没人能处理我是handler2,我处理了请求:59我是handler1,我处理了请求:2我是handler2,我处理了请求:16


http://www.cnblogs.com/java-my-life/archive/2012/05/28/2516865.html

原创粉丝点击