白话-23种设计模式15-责任链模式

举报
object 发表于 2022/07/09 14:51:13 2022/07/09
【摘要】 一、白话  现实生活中,我们会遇到很多流程,如请假流程,先是组长审批,没问题,然后是经理审批,没问题,最后是老板审批。这就是责任链模式的一种应用,请求按照请求链一次传递。二、定义  责任链模式为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。  抽象处理者(Handler)角色:定义一个处理请求的接口,包含抽象处理方法和一个后继连接。  具体处理者(Co...

一、白话

  现实生活中,我们会遇到很多流程,如请假流程,先是组长审批,没问题,然后是经理审批,没问题,最后是老板审批。这就是责任链模式的一种应用,请求按照请求链一次传递。

二、定义

  责任链模式为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。

  抽象处理者(Handler)角色:定义一个处理请求的接口,包含抽象处理方法和一个后继连接。
  具体处理者(Concrete Handler)角色:实现抽象处理者的处理方法,判断能否处理本次请求,如果可以处理请求则处理,否则将该请求转给它的后继者

三、示例

// 抽象处理者-提取公共方法
public abstract class AbLog {
    // 下一个责任链
    AbLog nextLog;

    public AbLog getNextLog() {
        return nextLog;
    }

    public void setNextLog(AbLog nextLog) {
        this.nextLog = nextLog;
    }

    public abstract void logMessage(String level, String message);
}
// 具体处理者-处理细节
public class InfoLog extends AbLog {
    @Override
    public void logMessage(String level, String message) {
        if ("info".equals(level)) {
            System.out.println("InfoLog开始记录日志,日志级别:"+ level + ",消息:"+message);
            return;
        }
        nextLog.logMessage(level,message);
    }
}
// 具体处理者-处理细节
public class ErrorLog extends AbLog {
    @Override
    public void logMessage(String level, String message) {
        if ("error".equals(level)) {
            System.out.println("ErrorLog开始记录日志,日志级别:"+ level + ",消息:"+message);
            return;
        }
        nextLog.logMessage(level,message);
    }
}

输出示例:

InfoLog开始记录日志,日志级别:info,消息:记录日志信息1
ErrorLog开始记录日志,日志级别:error,消息:记录日志信息2

四、总结

  特点:减低发送者和接受者耦合度。动态新增或者删除责任。新增新的处理类方便。容易出现循环调用。性能影响

  实际应用:Filter过滤器,handler处理器。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。