当前位置: 首页 > news >正文

寮步网站建设公司龙华网站建设首页地址

寮步网站建设公司,龙华网站建设首页地址,企业vi设计欣赏,哈尔滨建设局什么是责任链模式 责任链模式是一种行为型设计模式#xff0c;它的核心思想是将请求从一系列处理者中传递#xff0c;直到其中一个处理者能够处理它为止。在这个过程中#xff0c;请求可以被任何一个处理者处理#xff0c;也可以被拒绝#xff0c;直到有一个处理者能够处…什么是责任链模式 责任链模式是一种行为型设计模式它的核心思想是将请求从一系列处理者中传递直到其中一个处理者能够处理它为止。在这个过程中请求可以被任何一个处理者处理也可以被拒绝直到有一个处理者能够处理请求。 在Java开发中责任链模式的实现方式通常是通过一个抽象处理者Handler类来定义处理者的接口并在这个类中定义一个指向下一个处理者的引用形成一个链式结构。具体处理者Concrete Handler则继承自抽象处理者并实现其处理请求的方法。当一个请求被发起时它会首先被传递到第一个处理者如果第一个处理者不能处理它那么请求会被传递到下一个处理者直到有一个处理者能够处理它为止。 责任链模式代码解释 下面我们以一个简单的例子来说明责任链模式的使用方法。假设我们有一个请假系统需要根据不同的请假天数来分别由部门经理、人事主管和总经理进行审核。如果请假天数不超过2天由部门经理审核如果请假天数不超过5天由人事主管审核如果请假天数超过5天则需要总经理审核。 首先我们定义一个抽象处理者类Handler public abstract class Handler {protected Handler successor;public void setSuccessor(Handler successor) {this.successor successor;}public abstract void handleRequest(int days); } 在这个类中我们定义了一个指向下一个处理者的引用successor并提供了一个设置下一个处理者的方法setSuccessor。同时我们还定义了一个抽象方法handleRequest该方法用于处理请求。具体的处理者将继承这个类并实现自己的handleRequest方法。 下面我们来定义具体的处理者类。首先是部门经理处理者 public class DepartmentManager extends Handler {Overridepublic void handleRequest(int days) {if (days 2) {System.out.println(部门经理审批通过);} else {if (successor ! null) {successor.handleRequest(days);}}} } 在这个类中我们实现了父类中定义的handleRequest方法如果请假天数不超过2天则部门经理能够处理该请求并输出相应的处理结果否则请求将被传递给下一个处理者即人事主管处理者。 接下来是人事主管处理者 public class HRManager extends Handler {Overridepublic void handleRequest(int days) {if (days 5) {System.out.println(人事主管审批通过);} else {if (successor ! null) {successor.handleRequest(days);}}} }这个类的实现与部门经理处理者类类似如果请假天数不超过5天则人事主管能够处理该请求并输出相应的处理结果否则请求将被传递给下一个处理者即总经理处理者。 最后是总经理处理者 public class GeneralManager extends Handler {Overridepublic void handleRequest(int days) {System.out.println(总经理审批通过);} } 这个类的实现非常简单因为总经理是责任链中的最后一个处理者无论请求的请假天数是多少总经理都能够处理该请求。 最后我们来测试一下这个责任链模式的实现 public class Test {public static void main(String[] args) {Handler departmentManager new DepartmentManager();Handler hrManager new HRManager();Handler generalManager new GeneralManager();departmentManager.setSuccessor(hrManager);hrManager.setSuccessor(generalManager);departmentManager.handleRequest(1);departmentManager.handleRequest(3);departmentManager.handleRequest(7);} } 在这个测试程序中我们首先创建了部门经理、人事主管和总经理三个处理者然后通过setSuccessor方法将它们组合成一个责任链。最后我们分别测试了请求请假1天、请假3天和请假7天的情况。运行结果如下 部门经理审批通过 人事主管审批通过 总经理审批通过 可以看到在请求请假1天、请假3天和请假7天的情况下责任链分别被部门经理、人事主管和总经理处理并输出了相应的处理结果。 Android开发中的实际应用解析 在安卓中责任链模式也有广泛的应用。例如Android中的事件分发机制就是一种典型的责任链模式。当用户触摸屏幕时事件首先会被传递给Activity在Activity中处理完后事件会继续被传递给它的子View由子View来处理。如果子View不能处理该事件事件会被传递给父View直到事件被处理为止。这个过程形成了一个责任链而每个View都是责任链中的一个处理者。下面我们来看一下Android源码中的事件分发机制实现。 Android中的事件分发机制是从ViewGroup类开始的。ViewGroup类继承自View类是一种特殊的View可以包含其他View。在ViewGroup类中有一个onInterceptTouchEvent方法用于拦截子View的触摸事件。如果一个ViewGroup在onInterceptTouchEvent方法中返回了true则表示它要拦截子View的触摸事件并将事件交给自己的onTouchEvent方法来处理。如果返回了false则表示它不拦截子View的触摸事件将事件传递给子View来处理。 下面是ViewGroup类中onInterceptTouchEvent方法的源码 public boolean onInterceptTouchEvent(MotionEvent ev) {if (ev.isFromSource(InputDevice.SOURCE_MOUSE) ev.getActionMasked() MotionEvent.ACTION_DOWN ev.isButtonPressed(MotionEvent.BUTTON_SECONDARY)) {// The right mouse button is currently pressed.// We want to give the user a chance to reconsider before// performing an action that cannot be undone, such as dismissing// a notification or deleting a message.showContextMenu();return true;}if (mOnInterceptTouchListener ! null mOnInterceptTouchListener.onTouch(this, ev)) {return true;}if (ev.isFromSource(InputDevice.SOURCE_CLASS_POINTER)) {final int action ev.getAction();final float x ev.getX();final float y ev.getY();if (action MotionEvent.ACTION_DOWN) {mLastTouchDownIndex ev.getActionIndex();mLastTouchDownTime ev.getDownTime();mLastTouchDownX x;mLastTouchDownY y;mIgnoreNextUpEvent false;} else {// Short circuit if weve already canceled, or if we have no// children.final boolean canceled (mGroupFlags FLAG_DISALLOW_INTERCEPT) ! 0;if (!canceled mChildrenCount ! 0) {// If this is a pointer event, propagate it to our children.if (action MotionEvent.ACTION_POINTER_DOWN|| action MotionEvent.ACTION_MOVE) {final int index ev.getActionIndex();final int id ev.getPointerId(index);if (id ! mScrollPointerId) {final float dx x - mLastTouchDownX;final float dy y - mLastTouchDownY;final float xDiff Math.abs(dx);final float yDiff Math.abs(dy);final int touchSlop mTouchSlop;final boolean isGeneratedGesture ev.isGeneratedGesture();boolean interceptHorizontal false;boolean interceptVertical false;if ((mGroupFlags FLAG_DISALLOW_INTERCEPT) 0) {if ((mNestedScrollAxes SCROLL_AXIS_HORIZONTAL) ! 0) {interceptHorizontal | (xDiff touchSlop);}if ((mNestedScrollAxes SCROLL_AXIS_VERTICAL) ! 0) {interceptVertical | (yDiff touchSlop);}}if (isGeneratedGesture|| interceptHorizontal|| interceptVertical|| hasPointersOutOfView()) {mLastTouchMotionY y;mLastTouchMotionX x;cancelAndClearTouchTargets(ev);return true;}}} else if (action MotionEvent.ACTION_POINTER_UP) {final int index ev.getActionIndex();final int id ev.getPointerId(index);if (id mScrollPointerId) {// This was our active pointer going up. Choose a new// action pointer and adjust accordingly.final int newIndex ev.getPointerCount() - 1;mLastTouchDownX ev.getX(newIndex);mLastTouchDownY ev.getY(newIndex);mLastTouchDownIndex ev.findPointerIndex(newIndex);if (mVelocityTracker ! null) {mVelocityTracker.clear();}}}}}}return false; }可以看到在onInterceptTouchEvent方法中首先判断了是否有设置OnInterceptTouchListener如果有则交由OnInterceptTouchListener来处理触摸事件。 接着如果触摸事件是鼠标右键的按下事件则弹出上下文菜单并返回true拦截触摸事件防止后续的触摸事件继续传递下去。 如果以上两种情况都不满足则判断触摸事件是否来自于指针如果是则根据具体的触摸事件类型进行处理。例如如果是按下事件则记录下按下的坐标和时间等信息如果是移动事件则计算移动距离并根据一定的条件来决定是否拦截事件。 如果没有任何一个子View对该事件进行了处理则返回false表示不拦截该事件让其继续传递给子View进行处理。 以上就是在安卓中使用责任链模式的一个例子即事件分发机制。在这个机制中每个子View都是一个责任链节点它们依次处理触摸事件并根据具体的情况来决定是否将事件交给下一个节点处理。 总结 责任链模式的优点在于它能够将一个大型的、复杂的任务分解成多个小的、简单的任务每个任务都由一个节点来处理从而降低了系统的复杂性和耦合度。此外责任链模式还具有灵活性可以根据具体的需求来动态地调整节点的顺序和个数从而满足不同的业务场景。
http://www.dnsts.com.cn/news/76938.html

相关文章:

  • 高密市赏旋网站设计有限公司比wordpress更好的
  • 长沙企业网站推广服务公司wordpress快递主题
  • 云台山旅游景区网站建设内容网络推广营销网
  • wordpress备份网站领卷网站怎么做
  • 网站建设网络拓扑wordpress博客自媒体资讯主题
  • 网站建设毕业设计报告书可以直接玩游戏的网址
  • 新网站建设特色互联网保险优势
  • 网站建设包含那些 内容响应式网站搭建
  • 阿里云服务器如何配置多网站建设工程分包合同
  • 优化网站改版做网站前端多少钱
  • 江南大学做网站建网站的软件有哪些
  • 门户网站部署方案广告营销文案
  • 公司网站找哪家制作网页游戏平台
  • 植物园门户网站建设方案湖北住房建设网站
  • 花生壳网站建设如何使用阿里云做网站
  • 免费个人网站服务器 htmlwordpress本地数据库
  • 网站运营实训报告总结中国风网站模板html
  • 万网怎么做网站两当网站建设
  • 做本地团购网站软件销售
  • 建设企业网站进去无法显示网站改版seo方案
  • 徐州网站seo公司番禺网站建设平台
  • 做费网站个人域名网站
  • 自己建立网站用什么软件wordpress 分类树
  • 慈溪住房和城乡建设部网站更多标签的下载方法
  • 网站建设 交易保障杭州江干区抖音seo哪里有
  • 类似非小号的网站怎么做ui设计是什么需要美术功底吗
  • 装修行业 网站建设上海工程公司
  • 网站建设会议报道手机制作表白网站
  • 家庭网络如何做网站服务器常用企业网站模板对比
  • 网站建设 分类济南高新网站建设