设计模式-责任链模式
- 责任链模式详解
- 责任链模式在android的实际运用

11-8_11章结束[01_30_18][20180806-212950-9].jpg
1.责任链模式详解
1.概念
是一个请求有多个对象处理,这些对象是一条链,但具体是哪个对象处理,根据条件判断确定,如果不能处理会传递给该链的下一个对象,直到有对象处理它为止
2.使用场景
1.有多个对象可以处理同一个请求,但具体哪个对象处理该请求待运行时刻再确定。一个报告,给上级 ,上级处理不了继续 向上
2.在不明确指定接收者的情况下,向多个对象中的一个提交一个请求
3.可动态指定一组对象处理请求,客户端可以动态创建职责链来处理请求
3.UML结构图分析
图:
4.实际代码分析
1.抽象父类:重点 1.属性nextHandler 2.方法handleRequest
能自己处理就处理,不能处理让下一个处理者处理
public abstract class Handler{
private Handler nextHandler;
public int maxDay;
protected Handler(int maxDay){
this.maxDay = maxDay;
}
public void setNextHandler(Handler handler){
nextHandler = handler;
}
protected void handleRequest(int day){
if(day <= maxDay){
reply(day);
}else {
if(nextHandler !=null){
nextHandler.handleRequest(day);
}else{
System.out.println("没有更高的领导审批了");
}
}
}
protected abstract void reply(int day);
}
5.责任链设计模式优点
2.责任链模式在android的实际运用
1.try-catch 语句,如果有很多的catch语句,如果catch语句处理了,就不会向上传
2.Ordered Broadcast。 有序广播,如果ABC 都接收,A的优先级高,A先收
3.ViewGroup/View 事件传递
1.主要概念
MotionEvent
MotionEvent:ACTION_DOWN
:ACTION_MOVE
:ACTION_UP
事件分发机制三个重要方法
1.dispatchTouchEvent
当一个事件MotionEvent传递给当前View时,当前View就会调用该方法,这个方法返回值是boolean类型,返回结果表明是否消耗该事件,不会再向下传递。
这个方法时责任链模式的开端
2.onInterceptTouchEvent ;
只在ViewGroup中,默认返回false。
3.onTouchEvent方法, 会被dispatchTouchEvent调用
上层的View 即可以拦截该事件,也可以询问子View是否要处理事件,子View需要可以自己处理,不需要可以继续交给上层处理,这样既保证了整体事件的有序性,有
2.viewgroup的事件分发
1.ViewGroup事件分发流程
1.判断自身是否需要
2.自身不需要或者不确定,则询问ChildView
3.如果子Viwe 不需要则调用自身的onTouchEvent
2.具体的代码
3.两个小问题
1.ViewGroup中可能有多个子View,如何判断应该分配给哪一个?
把所有的子View都遍历一遍,如果手指触摸的点在子View所在的区域 就分发给它。
2.当该点的ChildView 有重叠是应该如何分配?
一般分配给最上层的
3.view的时间分发
View为啥会有dispatchTouchEvent方法?
View可以注册很多事件监听器
view的四个相关方法
a.单击事件(onClickListener)
b.长按事件(onLongClickListener)
c.触摸事件(onTouchListener)
d.View自身处理(onTouchEvent)
所以事件的调度顺序应该是 onTouchListener->onTouchEvent->onLongClickListener->onClickListener
事件分发机制原理,责任链设计模式,事件层层传递,直到被消费

11-8_11章结束[01_30_18][20180806-212950-9].jpg

11-8_11章结束[01_31_16][20180806-213030-0].jpg

11-8_11章结束[01_38_39][20180806-214442-1].jpg

11-8_11章结束[01_41_57][20180806-214659-2].jpg
网友评论