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

Android设计模式之责任链模式

一、定义:

        使多个对象都有机会处理请求,从而避免了请求的发送者和接收者之间的耦合关系将这些对象连城一条链,并沿着这条链传递该请求,只到有对象处理它为止。

二、模式结构:

        抽象处理者(Handler):定义处理请求的接口,包含处理方法和设置下一个处理者的引用。

        具体处理者(ConcreteHandler):实现抽象接口,决定是否处理请求或传递给链的下一个对象。

三、应用场景:

        1.事件处理:view的层级事件分发。

        2.网络拦截链:OkHttp请求的拦截器机制。

        3.权限校验:多级权限检查。

四、代码例子:

        1.定义抽象处理者

public abstract class LoggerHandler {
    protected LoggerHandler nextHandler;

    // 设置下一个处理器
    public void setNextHandler(LoggerHandler nextHandler) {
        this.nextHandler = nextHandler;
    }

    // 处理日志请求
    public abstract void handleLog(String message, int level);
}
        2.实现具体处理者

// INFO 级别日志处理器
public class InfoLogger extends LoggerHandler {
    @Override
    public void handleLog(String message, int level) {
        if (level <= LogLevel.INFO) {
            System.out.println("INFO: " + message); // 模拟处理逻辑
        } else if (nextHandler != null) {
            nextHandler.handleLog(message, level); // 传递给下一级
        }
    }
}

// DEBUG 级别日志处理器
public class DebugLogger extends LoggerHandler {
    @Override
    public void handleLog(String message, int level) {
        if (level <= LogLevel.DEBUG) {
            System.out.println("DEBUG: " + message);
        } else if (nextHandler != null) {
            nextHandler.handleLog(message, level);
        }
    }
}

// ERROR 级别日志处理器
public class ErrorLogger extends LoggerHandler {
    @Override
    public void handleLog(String message, int level) {
        if (level <= LogLevel.ERROR) {
            System.out.println("ERROR: " + message);
        } // 无需传递(链的末端)
    }
}

// 日志级别常量
class LogLevel {
    public static final int INFO = 1;
    public static final int DEBUG = 2;
    public static final int ERROR = 3;
}

        3.构建处理链

public class LoggerChain {
    public static LoggerHandler buildChain() {
        // 创建处理器实例
        LoggerHandler infoLogger = new InfoLogger();
        LoggerHandler debugLogger = new DebugLogger();
        LoggerHandler errorLogger = new ErrorLogger();

        // 设置链式关系
        infoLogger.setNextHandler(debugLogger);
        debugLogger.setNextHandler(errorLogger);

        return infoLogger; // 返回链的起点
    }
}
        4.使用责任链

public class Main {
    public static void main(String[] args) {
        LoggerHandler chain = LoggerChain.buildChain();

        // 测试日志处理
        chain.handleLog("App started", LogLevel.INFO);    // INFO: App started
        chain.handleLog("Network error", LogLevel.ERROR); // ERROR: Network error
        chain.handleLog("Debug data", LogLevel.DEBUG);    // DEBUG: Debug data
    }
}


五、优缺点:

优点:

        1.解耦请求发送者与处理者。

        2.动态调整处理顺序。

        3.符合单一职责原则。

缺点:

        1.请求可能未被处理。

        2.调试困难,需要跟踪链传递过程。

        3.性能损耗,长链影响效率。

相关文章:

  • 小程序:富文本的处理
  • C 语言基础知识
  • windows与ubuntu双硬盘双系统安装及启动(全流程成功)
  • Linux中输入输出管理技巧
  • jmeter线程组高并发(详细讲解)
  • 微信小程序实现动态二维码海报生成与保存 | 高效便捷的前端方案
  • UE5学习笔记 FPS游戏制作33 游戏保存
  • 数据库中的函数:高效操作与灵活运用
  • nut-collapse折叠面板(案例)
  • OSPF协议(数据包刨析)
  • NLP高频面试题(二十七)——SFT有哪几种参数微调方法?有什么优缺点?
  • 开源守护,智护童年——幼儿园未成年行为与安全智能监控系统
  • 贪心算法(14)(java)无重叠区间
  • SSL提供了哪些安全服务
  • 镜头光圈总结
  • Unity加载OSGB倾斜摄影数据
  • Android 确定废弃「屏幕方向锁定」等 API ,如何让 App 适配大屏和 PC/XR 等场景
  • Easysearch 如何短暂维护 Data 节点
  • Ubuntu 22.04安装MongoDB:GLM4模型对话数据收集与微调教程
  • 使用Google Gemini API密钥创建AI驱动的Chrome扩展程序
  • 针对人群不同,网站做细分/百度推广个人怎么开户
  • 做热区的网站/百度推广销售员的工作内容
  • 耐克网站建设的历程/凡科网小程序
  • wordpress网站空间/合肥关键词排名
  • 做网站的有哪些/推广软件app
  • 网站注册界面/百度问答首页