android 设计模式--责任链模式

定义

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

什么是 ‘链’ 我们将多个节点首位相连所构成的模型成为链 , 对于链式结构,每个节点都可以被拆开再连接。
将这样一种结构应用于编程领域,将每一个节点都看做是一个对象,每一个对象拥有不同的处理逻辑,将一个请求从链式的首端发出,沿着链的路径依次传递给每一个节点对象,直至有对象处理这个请求为止 ,我们将这一种模式称为责任链模式。

使用场景

多个对象可以处理同一请求,但具体由哪个对象处理则在运行时动态决定
在请求处理者不明确的情况下向多个对象中的一个提交一个请求
需要动态指定一组对象处理请求

简单示例

public abstract class Leader {
    protected  Leader nextHandler ; //上一级领导

    public final void handleRequest(int money){
        if(money <= limit()){
            handle(money);
        }else{
            if(null != nextHandler){
                nextHandler.handleRequest(money);
            }
        }
    }

    // 能批复的金额
    abstract int limit();

    // 处理报销
    abstract void handle(int money) ;
}

public class GroupLeader extends Leader {
    @Override
    int limit() {
        return 1000;
    }

    @Override
    void handle(int money) {
        System.out.println("组长处理报销 金额:"+money);
    }
}
public class ManagerLeader extends Leader {
    @Override
    int limit() {
        return 5000;
    }

    @Override
    void handle(int money) {
        System.out.println("经理处理报销 金额:"+money);
    }
}
public class BossLeader extends Leader {
    @Override
    int limit() {
        return Integer.MAX_VALUE;
    }

    @Override
    void handle(int money) {
        System.out.println("老板处理报销 金额:"+money);
    }
}
public class Client {

    public static void main(String[] args){

        GroupLeader groupLeader = new GroupLeader() ;
        ManagerLeader managerLeader = new ManagerLeader() ;
        BossLeader bossLeader = new BossLeader() ;
        groupLeader.nextHandler = managerLeader;
        managerLeader.nextHandler = bossLeader ;

        // 发起报销
        groupLeader.handleRequest(5000);
    }
}

android 源码示例 view 的时间传递 dispatchToouchEvent

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容