责任链模式

2018-01-31  本文已影响9人  andpy

责任链模式

一个请求有多个对象来处理,这些对象是一条链,但具体的由那个对象来处理,根据条件判断来确定,如果不能处理会传递给该链中的下一个对象,直到有对象处理它为止.

使用场景

代码示例:
Handler

public abstract class Handler {
    private Handler nextHandler;
    //当前领导可以审批的最大天数
    public int maxDay;
    protected Handler(int maxDay){
        this.maxDay = maxDay;
    }
    //设置责任链中下一个处理请求的对象
    public void setNextHnader(Handler nextHandler){
        this.nextHandler = nextHandler;
    }

    protected void handlerRequest(int day){
        if (day<=maxDay){
            reply(day);
        }else {
            if (null !=nextHandler){
                //权限不够继续向上报
                nextHandler.handlerRequest(day);
            }else {
                System.out.println("没有更高的领导审批了");
            }
        }
    }

    protected abstract void reply(int day);

}

Android/java中的实际运用

ViewGroup/View事件分发

VieGroup的事件分发

在 dispathcTouchEvent 中:


viewGroup.png

ViewGroup中可能存在多个ChildView,如何判断应该分配给哪一个?

把所有的子view遍历一遍,判断手指按住(事件触发的位置)的位置,就可以确定分配给那一个view.

当该点的childView有重叠是应该如何分配?

一般会分配给现在最上层的View(具体的得区分情况,跟android渲染机制有关系)

View为啥会有dispatchTouchEvent方法?

view的四个相关方法调用顺序?

上一篇下一篇

猜你喜欢

热点阅读