深入浅出职责链模式

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 深入浅出职责链模式

深入浅出职责链模式

简介

      职责链模式在面向对象程式设计里是一种软件设计模式,它包含了一些命令对象和一系列的处理对象。每一个处理对象决定它能处理哪些命令对象,它也知道如何将它不能处理的命令对象传递给该链中的下一个处理对象。该模式还描述了往该处理链的末尾添加新的处理对象的方法。

     责任链模式涉及到的角色如下所示:

● **抽象处理者(Handler)角色:**定义出一个处理请求的接口。如果需要,接口可以定义 出一个方法以设定和返回对下家的引用。这个角色通常由一个Java抽象类或者Java接口实现。Handler类的聚合关系给出了具体子类对下家的引用,抽象方法handleRequest()规范了子类处理请求的操作。

● **具体处理者(ConcreteHandler)角色:**具体处理者接到请求后,可以选择将请求处理掉,或者将请求传给下家。由于具体处理者持有对下家的引用,因此,如果需要,具体处理者可以访问下家。

网络异常,图片无法展示
|


场景说明

  • 批假条
  • 处理日志

在这里我们就代码实现下日志处理中的职责链模式:

假设一个事件需要进行日志处理,一共有Info、Warning、Error三个等级,每个等级都有相应的日志记录功能,记录日志时需要从低到高进行记录,首先要进行Info级别的记录,如果需要Error级别的日志则无法处理,所以需要高级别的日志记录器进行记录。

代码实现

网络异常,图片无法展示
|


BaseLogger.java

/**
 * @desc: 抽象职责处理类
 * @author: YanMingXin
 * @create: 2021/8/14-22:11
 **/
public abstract class BaseLogger {
    private BaseLogger logger;
    protected final String INFO_LEVEL = "info";
    protected final String WARNING_LEVEL = "warning";
    protected final String ERROR_LEVEL = "error";
    public BaseLogger getLogger() {
        return logger;
    }
    public void setLogger(BaseLogger logger) {
        this.logger = logger;
    }
    /**
     * 输出信息
     *
     * @param logLevel
     */
    public abstract void loggerMessage(String logLevel);
}
复制代码


ErrorLogger.java

/**
 * @desc: Error具体处理类
 * @author: YanMingXin
 * @create: 2021/8/14-22:12
 **/
public class ErrorLogger extends BaseLogger {
    @Override
    public void loggerMessage(String logLevel) {
        if (ERROR_LEVEL.equals(logLevel)) {
            System.out.println("error level log ......");
        } else {
            getLogger().loggerMessage(logLevel);
        }
    }
}
复制代码

InfoLogger.java

/**
 * @desc: Info具体处理类
 * @author: YanMingXin
 * @create: 2021/8/14-22:11
 **/
public class InfoLogger extends BaseLogger {
    @Override
    public void loggerMessage(String logLevel) {
        if (INFO_LEVEL.equals(logLevel)) {
            System.out.println("info level log ......");
        } else {
            getLogger().loggerMessage(logLevel);
        }
    }
}
复制代码

WarningLogger.java

/**
 * @desc: Warning具体处理类
 * @author: YanMingXin
 * @create: 2021/8/14-22:12
 **/
public class WarningLogger extends BaseLogger{
    @Override
    public void loggerMessage(String logLevel) {
        if (WARNING_LEVEL.equals(logLevel)) {
            System.out.println("warning level log ......");
        } else {
            getLogger().loggerMessage(logLevel);
        }
    }
}
复制代码

CorModelTest.java

/**
 * @desc: 职责链模式(责任链模式)测试类
 * @author: YanMingXin
 * @create: 2021/8/14-21:58
 **/
public class CorModelTest {
    public static void main(String[] args) {
        InfoLogger infoLogger = new InfoLogger();
        WarningLogger warningLogger = new WarningLogger();
        ErrorLogger errorLogger = new ErrorLogger();
        //生成职责链
        infoLogger.setLogger(warningLogger);
        warningLogger.setLogger(errorLogger);
        infoLogger.loggerMessage("error");
        infoLogger.loggerMessage("info");
        infoLogger.loggerMessage("warning");
    }
}
复制代码

测试结果:


网络异常,图片无法展示
|



相关实践学习
通过日志服务实现云资源OSS的安全审计
本实验介绍如何通过日志服务实现云资源OSS的安全审计。
相关文章
AutoJs4.1.0实战教程---抖音极速版
AutoJs4.1.0实战教程---抖音极速版
407 0
|
6月前
|
SQL 存储 自然语言处理
让跨 project 联查更轻松,SLS StoreView 查询和分析实践
让跨 project 联查更轻松,SLS StoreView 查询和分析实践
119 1
|
存储 机器学习/深度学习 人工智能
深入浅出 AI 智能体(AI Agent)|技术干货
随着人工智能技术的发展,智能体(AI Agents)逐渐成为人与大模型交互的主要方式。智能体能执行任务、解决问题,并提供个性化服务。其关键组成部分包括规划、记忆和工具使用,使交互更加高效、自然。智能体的应用涵盖专业领域问答、资讯整理、角色扮演等场景,极大地提升了用户体验与工作效率。借助智能体开发平台,用户可以轻松打造定制化AI应用,推动AI技术在各领域的广泛应用与深度融合。
23051 1
|
Java 索引 安全
[Mvel]Mvel2.0使用指南一 基础
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/SunnyYoona/article/details/75244442 MVEL在很大程度上受到Java语法的启发,作为一个表达式语言,也有一些根本的区别,旨在更高的效率,例如:直接支持集合、数组和字符串匹配等操作以及正则表达式。
15787 0
|
数据安全/隐私保护 C++
C++ 中的类是一种用户定义的数据类型,用于表示具有相似特征和行为的对象的模板。
C++ 中的类是一种用户定义的数据类型,用于表示具有相似特征和行为的对象的模板。
下载debian老版本的链接
下载debian老版本的链接
421 0
|
存储
【数据结构趣味多】循环队列
【数据结构趣味多】循环队列
|
安全
《跨国企业上云登陆区(Landing Zone)白皮书》——第八章 在阿里云构建云登录区(Landing Zone)最佳实践——8.6安全防护(1)
《跨国企业上云登陆区(Landing Zone)白皮书》——第八章 在阿里云构建云登录区(Landing Zone)最佳实践——8.6安全防护(1)
133 0
|
算法 搜索推荐 JavaScript
【算法】堆排序(typescript) 1
继续枯燥的排序算法。
218 0
【算法】堆排序(typescript) 1