Android 触摸事件 点击事件的分发机制 详解三---责任链模式

前面两节  我们讲述了 android 点击事件的分发流程。其实大家可以细细体会一下,这个分发的过程 始终是从顶层到下层。一层一层的按照顺序进行。

当然了,传到哪一层停止,我们可以通过重写某些方法来完成。

这个地方 android的开发人员很好的利用了 责任链模式来完成这边代码的编写。 下面我们就来讲一下 责任链模式到底是什么。以及如何运用。

大家知道 一个软件公司的基本架构就是 程序员----leader---project manager---boss 这种基础架构。

我们一般都会有teambuilding 对吧~~,比如说做完一个小项目 程序员小张 跟leader提议 我们building一次吧,申请经费若干元。

但是一般 leader只有权限批复 1000左右的经费,要是超过的话就要找manager去审批,当然manger也是有权限的,只能批复3000以下的

超过3000的 就只能找老板批准了。

这个就是典型的责任链模式。我们把这个生活中的场景 用代码来演示一遍 你们就知道责任链模式以后要怎么用了~~~~~

首先定义一个虚类,这个类就是我们的基础类。

 1 package com.design.test;
 2
 3 public abstract class Handler {
 4
 5     private Handler successor = null;
 6
 7     public Handler getSuccessor() {
 8         return successor;
 9     }
10
11     public void setSuccessor(Handler successor) {
12         this.successor = successor;
13     }
14
15     public abstract void handlerRequest(String usr, int money);
16
17 }

然后定义一个leader。我们假设这个leader只有1000的批复权限。

 1 package com.design.test;
 2
 3 public class Leader extends Handler {
 4
 5     @Override
 6     public void handlerRequest(String usr, int money) {
 7         if (money > 1000) {
 8             System.out.println("leader 没有权限批准" + usr
 9                     + "申请的这次活动经费 因为超过了1000元 找pm申请去了");
10             getSuccessor().handlerRequest(usr, money);
11
12         } else {
13             System.out.println("leader 批准了" + usr + "申请的这次活动经费 总共" + money
14                     + "元");
15         }
16
17     }
18
19 }

再定义一个manager 看看 ,假设他有3000的批复权限

 1 package com.design.test;
 2
 3 public class Manager extends Handler {
 4
 5     @Override
 6     public void handlerRequest(String usr, int money) {
 7         // TODO Auto-generated method stub
 8         if (money > 3000) {
 9             System.out.println("Manager 没有权限批准" + usr
10                     + "申请的这次活动经费 因为超过了3000元 找boss申请去了");
11             getSuccessor().handlerRequest(usr, money);
12         } else {
13             System.out.println("Manager 批准了" + usr + "申请的这次活动经费,总共" + money
14                     + "元");
15
16         }
17
18     }
19
20 }

最后我们定义一个老板,既然是老板,权限当然是自己的,随便批复无上限 ,哈哈

 1 package com.design.test;
 2
 3 public class Boss extends Handler {
 4
 5     @Override
 6     public void handlerRequest(String usr, int money) {
 7         // TODO Auto-generated method stub
 8
 9         System.out.println("Boss 批准了" + usr + "申请的这次活动经费 总共" + money + "元");
10
11     }
12
13 }

然后我们来测试一下 这个责任链模式~~写个主类吧

package com.design.test;

public class TestMain {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Handler leader = new Leader();
        Handler manager = new Manager();
        Handler boss = new Boss();
        leader.setSuccessor(manager);
        manager.setSuccessor(boss);

        leader.handlerRequest("张三", 800);
        System.out.println("----------------------");
        leader.handlerRequest("张三", 1200);
        System.out.println("----------------------");
        leader.handlerRequest("张三", 3200);

    }

}

最后看下日志

leader 批准了张三申请的这次活动经费 总共800元
----------------------
leader 没有权限批准张三申请的这次活动经费 因为超过了1000元 找pm申请去了
Manager 批准了张三申请的这次活动经费,总共1200元
----------------------
leader 没有权限批准张三申请的这次活动经费 因为超过了1000元 找pm申请去了
Manager 没有权限批准张三申请的这次活动经费 因为超过了3000元 找boss申请去了
Boss 批准了张三申请的这次活动经费 总共3200元

到这边如果看懂代码就很好理解了。其实这个模式很多场景都在用。比如tomcat里的过滤器 就是应用这个模式来完成的

时间: 2024-10-05 21:39:49

Android 触摸事件 点击事件的分发机制 详解三---责任链模式的相关文章

Android事件分发机制详解(1)----探究View的事件分发

探究View的事件分发 在Activity中,只有一个按钮,注册一个点击事件 [java] view plaincopy button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Log.d("TAG", "onClick execute"); } }); 如果在需要一个触摸事件 [java] view plaincopy button.setO

Android事件分发机制详解(2)----分析ViewGruop的事件分发

首先,我们需要 知道什么是ViewGroup,它和普通的View有什么区别? ViewGroup就是一组View的集合,它包含很多子View和ViewGroup,是Android 所有布局的父类或间接父类. 但ViewGroup也是一个View,只不过比起View,它可以包含子View和定义布局参数的功能. 现在,通过一个Demo演示Android中ViewGroup的事件分发机制. 首先我们来自定义一个布局,命名为MyLayout,继承自LinearLayout,如下 所示: public c

Cocos2d-X研究之v3.x 事件分发机制详解

事件分发机制 新事件分发机制:在2.x 版本事件处理时,将要触发的事件交给代理(delegate)处理,再通过实现代理里面的onTouchBegan等方法接收事件,最后完成事件的响应.而在新的事件分发机制中,只需通过创建一个事件监听器-用来实现各种触发后的逻辑,然后添加到事件分发器_eventDispatcher,所有事件监听器由这个分发器统一管理,即可完成事件响应.请参考更多3.0资料... 事件监听器有以下几种: 触摸事件 (EventListenerTouch) 键盘响应事件 (Event

android 事件分发机制详解(OnTouchListener,OnClick)

昨天做东西做到触摸事件冲突,以前也经常碰到事件冲突,想到要研究一下Android的事件冲突机制,于是从昨天开始到今天整整一天时间都要了解这方面的知识,这才懂了安卓的触摸和点击事件的机制.探究如下: 首先重写三个View布局,用来做测试: package com.example.yzj.android_8_10; import android.content.Context; import android.util.AttributeSet; import android.util.Log; im

Android 触摸事件 点击事件的分发机制 详解

最近发现团队里有些员工在做一些自定义控件的时候感觉比较吃力.尤其是做触摸事件这种东西的时候.很多人对机制并不理解.因为百度出来的东西都太理论化了.确实不好理解. 今天带大家坐几个小demo.帮助理解一下. 先从简单的view 的事件分发机制开始解释. 我们首先自定义一个工程 package com.example.testtouch; import android.app.Activity; import android.os.Bundle; import android.util.Log; i

Android 触摸事件 点击事件的分发机制 详解二

现在我们来看看 事件分发的流程.view group 怎么传递给view的. 首先自定义一个layout 1 package com.example.testtouch; 2 3 import android.content.Context; 4 import android.util.AttributeSet; 5 import android.util.Log; 6 import android.view.MotionEvent; 7 import android.widget.Linear

Android事件分发机制详解:史上最全面、最易懂

前言 Android事件分发机制是每个Android开发者必须了解的基础知识 网上有大量关于Android事件分发机制的文章,但存在一些问题:内容不全.思路不清晰.无源码分析.简单问题复杂化等等 今天,我将全面总结Android的事件分发机制,我能保证这是市面上的最全面.最清晰.最易懂的 本文秉着"结论先行.详细分析在后"的原则,即先让大家感性认识,再通过理性分析从而理解问题: 所以,请各位读者先记住结论,再往下继续看分析: 文章较长,阅读需要较长时间,建议收藏等充足时间再进行阅读 目

Android事件分发机制详解

我们通过一个示例来分析Touch事件的分发过程. 示例: 布局文件: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id=&

Android 事件分发机制详解

更多内容请参照我的个人站点: http://stackvoid.com/ 网上很多关于Android事件分发机制的解释,大多数描述的都不够清晰,没有吧来龙去脉搞清楚,本文将带你从Touch事件产生到Touch事件被消费这一全过程作全面的剖析. 产生Touch事件 这部分牵扯到硬件和Linux内核部分:我们简单讲述一下这部分内容,如果有兴趣的话可以参考这篇文章. 传递Touch事件 触摸事件是由Linux内核的一个Input子系统来管理的(InputManager),Linux子系统会在/dev/