Java设计模式——责任链模式

来源:互联网 发布:淘宝联盟怎么微信推广 编辑:程序博客网 时间:2024/06/07 10:45

          责任链模式,顾名思义,多个对象可以处理同一个请求,但是用哪个对象处理请求,是动态的,对象成链式结构,将请求一级一级向下传,处理则截断,否则继续向下传递,这就是责任链模式。

        android里的屏幕触摸事件就是用的这种模式,父布局先收到触摸事件,如果父布局选择处理,子view则收不到触摸事件,反之父布局将事件传给子布局,后面有时间我会写一篇关于android触摸事件传递的源码讲解,在这之前先了解一下责任链模式。


先写一个抽象类作为父类:

public abstract class EventHandler {    public EventHandler eventHandler;//下一个节点    public abstract void doSomething(String name);//待处理的请求}

然后创建三个可以处理同一个请求的对象:

public class MyHandler1 extends EventHandler {    @Override    public void doSomething(String name) {        if ("MyHandler1".equals(name)) {            Log.e("tag", "MyHandler1 处理了事件");        } else {            if (eventHandler != null)                eventHandler.doSomething(name);        }    }}

public class MyHandler2 extends EventHandler {    @Override    public void doSomething(String name) {        if ("MyHandler2".equals(name)) {            Log.e("tag", "MyHandler2 处理了事件");        } else {            if (eventHandler != null)                eventHandler.doSomething(name);        }    }}

public class MyHandler3 extends EventHandler {    @Override    public void doSomething(String name) {        if ("MyHandler3".equals(name)) {            Log.e("tag", "MyHandler3 处理了事件");        } else {            if (eventHandler != null)                eventHandler.doSomething(name);        }    }}

好了,不用解释什么,代码几乎都是一样的,使用起来很简单:

 MyHandler1 handler1 = new MyHandler1();        MyHandler2 handler2 = new MyHandler2();        MyHandler3 handler3 = new MyHandler3();        //设置MyHandler1的下一个节点        handler1.eventHandler = handler2;        //设置MyHandler2的下一个节点        handler2.eventHandler = handler3;        handler1.doSomething("MyHandler2");

传入MyHandler2,这个事件将会被MyHandler2处理,并且截断不再传给MyHandler3

原创粉丝点击