ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

菜鸟程序员都能看懂的“职责链模式”

2021-01-11 11:04:29  阅读:204  来源: 互联网

标签:getDays 请求 处理 菜鸟 request 程序员 能看懂 verify public


最近河北一直在报道新冠疫情的相关信息,大家一定要注意防护,戴口罩,少聚集,勤洗手。相信河北、相信中国,我们一定会挺过去的。

概述

职责链模式也被称为责任链模式,是行为型设计模式的一种。

职责链模式的核心思想是:将请求的发送者和接收者进行解耦,通过创建一个接收者对象的“链”(就是将多个接收者连接起来)来处理请求。

在职责链模式中通常每个接收者都包含另一个接收者的引用,这样在处理请求时,如果自己无法处理该请求时就会把请求,传递给下一个接收者,依次类推直到最后。

职责链模式UML类图

在这里插入图片描述

类图讲解

Handler:抽象处理者角色;定义了处理请求的相关接口,并聚合了一个Handler对象。
ConcreteHandlerA/B:具体处理者角色;继承了Handler并实现了处理请求的相关接口;主要的作用是处理自己负责的请求,如果请求不属于自己时,负责将请求传递给下一个处理者。
Request:表示请求角色。
Client:客户端测试类。

演示案例

案例:通过职责链模式来实现根据请假天数的不同需要不同领导进行审批的功能。

审核请求 => 对应请求角色

public class VerifyRequest {

  // 请假天数
  private int days;

  // 请求者姓名
  private String requestorName;

  // ...get()和set();
}

抽象处理者

public abstract class Approver {

  // 下一个处理者
  protected Approver approver;

  // 审核(处理请求的方法)
  public abstract void verify(VerifyRequest request);

  public void setApprover(Approver approver) {
    this.approver = approver;
  }
}

具体处理者

// 团队组长
public class GroupLeader extends Approver {

  @Override
  public void verify(VerifyRequest request) {
    if (request.getDays() <= 3) {
      System.out.println("团队组长,同意了" + request.getRequestorName()
          + "的" + request.getDays() + "天请假申请。");
    } else {
      // 不属于当前处理者的处理范围,让下一个处理者处理
      approver.verify(request);
    }
  }
}

// 项目经理
public class ProjectManager extends Approver {

  @Override
  public void verify(VerifyRequest request) {
    if (request.getDays() > 3 && request.getDays() <= 10) {
      System.out.println("项目经理,同意了" + request.getRequestorName()
          + "的" + request.getDays() + "天请假申请。");
    } else {
      // 不属于当前处理者的处理范围,让下一个处理者处理
      approver.verify(request);
    }
  }
}

// 老板
public class Boss extends Approver {

  @Override
  public void verify(VerifyRequest request) {
    if (request.getDays() > 10) {
      System.out.println("老板,同意了" + request.getRequestorName()
          + "的" + request.getDays() + "天请假申请。");
    } else {
      // 不属于当前处理者的处理范围,让下一个处理者处理
      approver.verify(request);
    }
  }
}

客户端测试类

public class Client {

  public static void main(String[] args) {
    // 创建请求
    VerifyRequest request = new VerifyRequest();
    request.setDays(10);
    request.setRequestorName("编程小菜鸟");

    // 创建处理者链
    GroupLeader groupLeader = new GroupLeader();
    ProjectManager projectManager = new ProjectManager();
    Boss boss = new Boss();
    groupLeader.setApprover(projectManager);
    projectManager.setApprover(boss);
    boss.setApprover(groupLeader);

    // 进行审核
    groupLeader.verify(request);
  }
}

测试结果

在这里插入图片描述

总结

1、职责链模式将请求和处理进行拆分,从而实现了解耦,并且提高了系统的灵活性。

2、客户端只需要将请求发送到职责链上即可,无需关心请求的处理细节和跳转过程。

3、使用职责链模式会影响程序的性能,特别是链比较长的时候,因此需要控制其最大节点数。

4、职责链模式采用了类似递归的方式完成请求的处理,这种方式会增加调试的难度。

今天的分享就到这里了,如果感觉“菜鸟”写的文章还不错,记得点赞、转发加关注呦!你们的支持就是我坚持下去的动力。文章哪里写的有问题的也希望大家可以指出,我会虚心受教。

在这里插入图片描述

标签:getDays,请求,处理,菜鸟,request,程序员,能看懂,verify,public
来源: https://blog.csdn.net/first_M/article/details/112435232

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有