美文网首页
责任链模式——《Android源码设计模式解析与实践》读书笔记9

责任链模式——《Android源码设计模式解析与实践》读书笔记9

作者: 某翼 | 来源:发表于2017-08-14 22:02 被阅读0次

定义

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

使用场景

(1)多个对象可以处理同一请求,但具体由哪个对象处理则在运行时动态决定。

(2)在请求处理者不明确的情况下向多个对象中的一个提交一个请求。

(3)需要动态指定一组对象处理请求。

UML类图

简化模式:

简化责任链模式,多角色

通用模式:

通用责任链模式,多角色

关键点

(1)请求的发起可以从责任链的任何一个节点开始。

(2)责任链中的任意一个处理者对象都只有两个行为,一是处理请求,二是将请求转送给下一个节点。

(3)处理者处理请求后不允许转送到其他节点进行处理。

(4)纯的责任链指请求被责任链中某个处理对象处理的责任链,不纯的责任链指所有处理者对象都没处理请求的责任链。

实现方式

简化模式

Handler基类:

public abstract class Handler{

    protected Handler successor;

    public abstract void handleRequest(string condition);

}

Handler子类1:

public Handler1 extends Handler{

    @Override

    public void handleRequest(String condition){

        if (null != condition && condition.equals("condition1")){

            return;

        } else {

            successor.handleRequest(condition);

        }

    }

}

Handler子类2:

public Handler2 extends Handler{

    @Override

    public void handleRequest(String condition){

        if (null != condition && condition.equals("condition2")){

            return;

        }else {

            successor.handleRequest(condition);

        }

    }

}

调用例子

public class Test{

    public static void main(string [] args){

        Handler1 mHandler1 = new Handler1();

        Handler2 mHandler2 = new Handler2();

        mHandler1.successor= mHandler2;

        mHandler2.successor= mHandler1;

        mHandler2.handleRequest("condition2");

    }

}

通用模式

在简化模式的基础上:

(1)Handler子类中添加一个获取处理请求类型(通常表现为权限等级)的方法

(2)对请求进行封装,形成抽象类Request以及其对应子类,每个类中含处理体及其getter、setter方法,以及获取请求类型(通常表现为权限等级)的方法

即可构成通用模式的责任链模式模型代码。

责任链模式的优缺点

优点

>请求者和处理者解耦,代码灵活性得到提高

缺点

>请求链中对处理者遍历可能太长,特别是递归调用,会影响性能

Android中的责任链模型举例

ViewTree自上而下分发事件的机制,即View的事件分发模型

——2017.08.14

相关文章

网友评论

      本文标题:责任链模式——《Android源码设计模式解析与实践》读书笔记9

      本文链接:https://www.haomeiwen.com/subject/gtuprxtx.html