您现在的位置是:首页 > 编程 > 

深入浅出职责链模式

2025-07-28 15:28:18
深入浅出职责链模式 职责链模式在面向对象程式设计里是一种软件设计模式,它包含了一些命令对象和一系列的处理对象。每一个处理对象决定它能处理哪些命令对象,它也知道如何将它不能处理的命令对象传递给该链中的下一个处理对象。该模式还描述了往该处理链的末尾添加新的处理对象的方法。责任链模式涉及到的角如下所示:抽象处理者(Handler)角:定义出一个处理请求的接口。如果需要,接口可以定义 出一个方法以设定

深入浅出职责链模式

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

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

  • 抽象处理者(Handler)角:定义出一个处理请求的接口。如果需要,接口可以定义 出一个方法以设定和返回对下家的引用。这个角通常由一个Java抽象类或者Java接口实现。Handler类的聚合关系给出了具体子类对下家的引用,抽象方法handleRequest()规范了子类处理请求的操作。
  • 具体处理者(ConcreteHandler)角:具体处理者接到请求后,可以选择将请求处理掉,或者将请求传给下家。由于具体处理者持有对下家的引用,因此,如果需要,具体处理者可以访问下家。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E85rqMzC-1629080711080)(深入浅出职责链模式.assets/image-20210816100748828.png)]

场景说明

  • 批假条
  • 处理日志
  • ......

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

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

代码实现

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wqk291rW-162908071108)(深入浅出职责链模式.assets/image-2021081610248210.png)]

BaseLogger.java

代码语言:java复制
/**
 * @desc: 抽象职责处理类
 * @author: YanMingXin
 * @create: 2021/8/14-22:11
 **/
public abstract class BaseLogger {

    private BaseLogger logger;

    protected final String IFO_LEVEL = "info";

    protected final String WARIG_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

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

InfoLogger.java

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

WarningLogger.java

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

CorModelTest.java

代码语言: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");
    }

}

测试结果:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-et5dhJcZ-1629080711085)(深入浅出职责链模式.assets/image-202108161024064.png)]

#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格

本文地址:http://www.dnpztj.cn/biancheng/1203519.html

相关标签:无
上传时间: 2025-07-24 04:45:28
留言与评论(共有 10 条评论)
本站网友 养老金替代率
28分钟前 发表
2021/8/14-22
本站网友 澄城在线
16分钟前 发表
可以选择将请求处理掉
本站网友 天河公园二手房
9分钟前 发表
Warning具体处理类 * @author
本站网友 避风塘奶茶加盟
4分钟前 发表
如果需要Erro别的日志则无法处理
本站网友 索引号
11分钟前 发表
职责链模式(责任链模式)测试类 * @author
本站网友 黄鳝血
15分钟前 发表
记录日志时需要从低到高进行记录
本站网友 绵阳二手房
5分钟前 发表
代码实现[外链图片转存失败
本站网友 2007年房价
4分钟前 发表
每个等级都有相应的日志记录功能
本站网友 加入购物车
22分钟前 发表
Error具体处理类 * @author