博客
关于我
设计模式十三:责任链模式(Chain of Responsibility Pattern)
阅读量:595 次
发布时间:2019-03-11

本文共 1901 字,大约阅读时间需要 6 分钟。

职责链模式详解

概述

职责链模式是一种设计模式,旨在解决当一个请求需要由多个对象来处理时,如何动态地确定具体由哪个对象来处理此请求的问题。这种模式通过条件判断的方式,确保请求能够沿着职责链传递,直到有对象能够处理它为止。

概念

职责链模式的基本思想是:当一个请求需要由多个对象来处理时,这些对象会组成一条链。具体由哪个对象来处理请求,则取决于运行时刻的条件判断。如果某个对象无法处理该请求,它会将请求传递给链中的下一个对象,依此类推,直到有对象能够处理请求为止。

使用场景

职责链模式在以下情况下非常有用:

  • 有多个对象可以处理同一个请求,但具体由哪个对象处理需要在运行时确定
  • 在不明确指定接受者的情况下,向多个对象中的一个提交一个请求
  • 可动态指定一组对象来处理请求,客户端可以根据实际需求动态创建职责链
  • UML结构图分析

    图1展示了职责链模式的UML结构图,描述了职责链的基本组成部分:

    • Chain:表示职责链本身
    • AbstractHandler:抽象处理器类,定义了处理请求的基本接口
    • ConcreteHandler:具体处理器类,实现了AbstractHandler的具体处理逻辑
    • ChainLink:链中的一个节点,负责将请求传递给下一个处理器
    • Handler1、Handler2:具体处理器类的示例

    实际代码分析

    以下是一个简单的职责链模式实现示例:

    AbstractHandler handler = new Handler1();handler.setNext(new Handler2());try {    handler.handleRequest(request);} catch (HandlerException e) {    // 处理异常情况}

    在这个示例中:

    • Handler1和Handler2都是具体处理器类
    • 处理器之间通过setNext方法连接成链
    • handleRequest方法定义了处理请求的逻辑
    • 如果当前处理器无法处理请求,会将请求传递给下一个处理器

    优点

    职责链模式具有以下优点:

  • 灵活性:可以根据实际需求动态创建职责链
  • 可扩展性:支持通过动态连接多个处理器
  • 简洁性:简化了请求处理的逻辑,避免了多个处理器直接交互的复杂性
  • 在Android中的实际运用

    职责链模式在Android开发中可以应用于以下场景:

  • try-catch语句:用于处理可能失败的操作,确保请求能够沿着职责链传递
  • Ordered Broadcast 有序广播:在有序广播中,任务需要按照特定的顺序执行,可以通过职责链实现任务的有序执行
  • ViewGroup/View事件传递:在Android中,ViewGroup和View之间的事件传递可以通过职责链的方式实现,从而使事件传递更加灵活和可控
  • 主要概念

    • 有序广播:在Android中,有序广播允许应用程序在特定事件(如系统事件)发生时,注册的广播接收器按照特定的顺序接收和处理事件
    • ViewGroup事件分发:ViewGroup是Android中用于管理View及其子View的类,负责处理View之间的事件分发
    • View事件分发:View类定义了与用户交互相关的事件(如点击事件、长按事件等),这些事件需要通过ViewGroup进行传递和处理

    ViewGroup的事件分发

    在Android中,ViewGroup负责将View之间的事件(如点击事件、长按事件)进行分发。具体分发过程如下:

  • 事件生成:当View接收到一个用户输入事件时,会生成一个MotionEvent对象
  • 事件分发:ViewGroup会将事件从当前的View传递给它的子View,直到找到能够处理该事件的View为止
  • 事件处理:子View接收到事件后,会根据事件类型调用相应的处理方法(如onClick方法)
  • View的事件分发

    View类的事件分发机制非常灵活,允许开发者根据需求定义事件的处理逻辑。以下是View事件分发的主要步骤:

  • 事件生成:当View接收到一个用户输入事件时,会生成一个MotionEvent对象
  • 事件分发:View会将事件传递给它的父View(即ViewGroup),父View会根据事件类型决定如何处理该事件
  • 事件处理:ViewGroup和子View可以根据事件类型自定义事件处理逻辑,例如:
    • 点击事件:View.onClick方法
    • 长按事件:View.onLongClick方法
    • 触摸事件:View.onTouch方法
  • 通过职责链模式,开发者可以更灵活地管理事件的处理流程,确保在多个View之间事件能够按照预期的顺序和逻辑进行传递和处理。

    转载地址:http://cbttz.baihongyu.com/

    你可能感兴趣的文章
    NIFI大数据进阶_FlowFile拓扑_对FlowFile内容和属性的修改删除添加_介绍和描述_以及实际操作---大数据之Nifi工作笔记0023
    查看>>
    NIFI大数据进阶_NIFI的模板和组的使用-介绍和实际操作_创建组_嵌套组_模板创建下载_导入---大数据之Nifi工作笔记0022
    查看>>
    NIFI大数据进阶_NIFI监控的强大功能介绍_处理器面板_进程组面板_summary监控_data_provenance事件源---大数据之Nifi工作笔记0025
    查看>>
    NIFI大数据进阶_NIFI集群知识点_集群的断开_重连_退役_卸载_总结---大数据之Nifi工作笔记0018
    查看>>
    NIFI大数据进阶_内嵌ZK模式集群1_搭建过程说明---大数据之Nifi工作笔记0015
    查看>>
    NIFI大数据进阶_外部ZK模式集群1_实际操作搭建NIFI外部ZK模式集群---大数据之Nifi工作笔记0017
    查看>>
    NIFI大数据进阶_离线同步MySql数据到HDFS_01_实际操作---大数据之Nifi工作笔记0029
    查看>>
    NIFI大数据进阶_离线同步MySql数据到HDFS_02_实际操作_splitjson处理器_puthdfs处理器_querydatabasetable处理器---大数据之Nifi工作笔记0030
    查看>>
    NIFI大数据进阶_连接与关系_设置数据流负载均衡_设置背压_设置展现弯曲_介绍以及实际操作---大数据之Nifi工作笔记0027
    查看>>
    NIFI数据库同步_多表_特定表同时同步_实际操作_MySqlToMysql_可推广到其他数据库_Postgresql_Hbase_SqlServer等----大数据之Nifi工作笔记0053
    查看>>
    NIFI汉化_替换logo_二次开发_Idea编译NIFI最新源码_详细过程记录_全解析_Maven编译NIFI避坑指南001---大数据之Nifi工作笔记0068
    查看>>
    NIFI集群_内存溢出_CPU占用100%修复_GC overhead limit exceeded_NIFI: out of memory error ---大数据之Nifi工作笔记0017
    查看>>
    NIFI集群_队列Queue中数据无法清空_清除队列数据报错_无法删除queue_解决_集群中机器交替重启删除---大数据之Nifi工作笔记0061
    查看>>
    NIH发布包含10600张CT图像数据库 为AI算法测试铺路
    查看>>
    Nim教程【十二】
    查看>>
    Nim游戏
    查看>>
    NIO ByteBuffer实现原理
    查看>>
    Nio ByteBuffer组件读写指针切换原理与常用方法
    查看>>
    NIO Selector实现原理
    查看>>
    nio 中channel和buffer的基本使用
    查看>>