首页 > 代码库 > Android 触摸事件 点击事件的分发机制 详解三---责任链模式

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 + "申请的这次活动经费 总共" + money14                     + "元");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 没有权限批准" + usr10                     + "申请的这次活动经费 因为超过了3000元 找boss申请去了");11             getSuccessor().handlerRequest(usr, money);12         } else {13             System.out.println("Manager 批准了" + usr + "申请的这次活动经费,总共" + money14                     + "元");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里的过滤器 就是应用这个模式来完成的

 

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