责任链模式:

使多个对象都有机会处理请求,从而避免了请求的发送者和接受者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有对象处理它为止。 (来自《设计模式之禅》)

使用场景:

在互联网企业中,程序员这个岗位的招聘流程大同小异,而一般至少都会有 3 轮面试,分别是 2 轮技术面和 1 轮 HR 面。而这几轮面试都是层层递进的,最开始面试一般是组长面试,通过之后就是部门领导面试,再通过之后就是 HR 面试,HR 面试通过之后就可以成功拿到 Offer 了。

故事从小明参加某公司的面试开始,某公司的招聘流程就是上面说的 3 轮面试。招聘流程的面试官分别是:第一面是组长老刚,第二面是部门经理老孙,第三面也就是终面是 HR 老刘。为什么说这个场景符合责任链模式呢?首先不管是组长还是部门经理还是 HR,他们都作为面试官,面试官赋予他们的权利是去面试来公司面试的同学,而面试的结果是可传递性的,也就是如果面试通过,就会到下一轮面试,最终成为一条传递链。我们用代码模拟这个过程。

public class ChainOfResponsibilityTest {public static void main(String[] args) {Interviewee interviewee = new Interviewee("小明");TeamLeader teamLeader = new TeamLeader("老刚");DepartMentManager departMentManager = new DepartMentManager("老孙");HR hr = new HR("老刘");// 设置面试流程teamLeader.setNextInterviewer(departMentManager);departMentManager.setNextInterviewer(hr);// 开始面试teamLeader.handleInterview(interviewee);}}
/*** 面试者*/
class Interviewee {private String name;private boolean teamLeaderOpinion;private boolean departMentManagerOpinion;private boolean hrOpinion;public Interviewee(String name) {this.name = name;}public String getName() {return name;}public void setName(String name) {this.name = name;}public boolean isTeamLeaderOpinion() {return teamLeaderOpinion;}public void setTeamLeaderOpinion(boolean teamLeaderOpinion) {this.teamLeaderOpinion = teamLeaderOpinion;}public boolean isDepartMentManagerOpinion() {return departMentManagerOpinion;}public void setDepartMentManagerOpinion(boolean departMentManagerOpinion) {this.departMentManagerOpinion = departMentManagerOpinion;}public boolean isHrOpinion() {return hrOpinion;}public void setHrOpinion(boolean hrOpinion) {this.hrOpinion = hrOpinion;}
}/*** 面试官抽象类*/
abstract class Interviewer {protected String name;protected Interviewer nextInterviewer;public Interviewer(String name) {this.name = name;}public Interviewer setNextInterviewer(Interviewer nextInterviewer) {this.nextInterviewer = nextInterviewer;return this.nextInterviewer;}public abstract void handleInterview(Interviewee interviewee);}/*** 组长*/
class TeamLeader extends Interviewer {public TeamLeader(String name) {super(name);}@Overridepublic void handleInterview(Interviewee interviewee) {System.out.println("组长[" + this.name + "]面试[" + interviewee.getName() + "]同学");interviewee.setTeamLeaderOpinion(new Random().nextBoolean());if (interviewee.isTeamLeaderOpinion()) {System.out.println("[" + interviewee.getName() + "]同学组长轮面试通过");this.nextInterviewer.handleInterview(interviewee);} else {System.out.println("[" + interviewee.getName() + "]同学组长轮面试不通过");}}
}/*** 部门经理*/
class DepartMentManager extends Interviewer {public DepartMentManager(String name) {super(name);}@Overridepublic void handleInterview(Interviewee interviewee) {System.out.println("部门经理[" + this.name + "]面试[" + interviewee.getName() + "]同学");interviewee.setDepartMentManagerOpinion(new Random().nextBoolean());if (interviewee.isDepartMentManagerOpinion()) {System.out.println("[" + interviewee.getName() + "]同学部门经理轮面试通过");this.nextInterviewer.handleInterview(interviewee);} else {System.out.println("[" + interviewee.getName() + "]同学部门经理轮面试不通过");}}
}/*** HR*/
class HR extends Interviewer {public HR(String name) {super(name);}@Overridepublic void handleInterview(Interviewee interviewee) {System.out.println("HR[" + this.name + "]面试[" + interviewee.getName() + "]同学");interviewee.setHrOpinion(new Random().nextBoolean());if (interviewee.isHrOpinion()) {System.out.println("[" + interviewee.getName() + "]同学HR轮面试通过, 恭喜拿到 Offer");} else {System.out.println("[" + interviewee.getName() + "]同学HR轮面试不通过");}}
}

打印结果:

组长[老刚]面试[小明]同学

[小明]同学组长轮面试通过

部门经理[老孙]面试[小明]同学

[小明]同学部门经理轮面试通过

HR[老刘]面试[小明]同学

[小明]同学HR轮面试通过, 恭喜拿到 Offer

讲解一下代码,Interviewee 是面试者,对于企业来说这个面试者来面试的过程会有 3 个关键标识,就是 3 位面试官对这位面试者的评价,只有都评价好才能通过面试拿到 Offer,所以 Interviewee 类有 3 位面试官的面试结果。

Interviewer 是面时官,企业中面试官不是一个职位,而是一个工作,帮企业招到合适的人才,所以它是一个抽象类,有一个抽象方法就是去面试应聘者,具体面试过程又各面试官实现,而因为这个面试会有结果反馈,结果好的会进入下一轮面试,所以会有下一个面试官的对象引用,责任链模式也就在这里体现。

TeamLeader、DepartMentManager、HR 则为公司的不同职位,而这些职位当公司需要招聘时,都需要去充当面试官,所以都继承了 Interviewer。这整个过程就构成了责任链模式代码示例,希望在金三银四各位蠢蠢欲动的朋友们都能闯到最后一关拿下 HR 姐姐。

行为型模式17-责任链模式相关推荐

  1. 行为型模式:责任链模式

    定义:责任链模式(Chain of Responsibility)使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系.将这些对象连成一条链,并沿着这条链传递该请求,直到有对象能够处 ...

  2. 设计模式——行为型模式之责任链模式(简简单单入门责任链,理解I/O流消息怎么逐步传递处理以及服务器框架转发)

    文章目录 前言 一.责任链模式定义 二.责任链模式结构 三.责任链高级应用 四.责任链模式优缺点 设计模式系列文章 结尾 前言 作者更有一系列设计模式文章(还在持续更新),图例丰富,少量代码,适合入门 ...

  3. Activiti 中的 命令模式与责任链模式

    Activiti 中的 命令模式与责任链模式 类图: 标准命令模式: 意图:将一个请求封装成一个对象,从而使您可以用不同的请求对客户进行参数化. 主要解决:在软件系统中,行为请求者与行为实现者通常是一 ...

  4. 设计模式之模板方法模式、策略模式、命令模式、责任链模式、状态模式

    前言 本章节给您介绍23种设计模式的行为型模式中的模板方法模式.策略模式.命令模式.责任链模式.状态模式. 如有帮助记得3连 加 关注哦!欢迎品论去留言交流,谢谢阅读! 文章目录 前言 一.模板方法模 ...

  5. 工厂模式、策略者模式、责任链模式综合应用

    设计模式的具体运用: 简单工厂模式.策略者模式.责任链模式定义与使用 classLoader的具体运用 自定义的classloader 来动态加载类 程序功能设计: 在商城购物时,商城可能会在特殊的日 ...

  6. 设计模式-责任型模式(责任链模式)

    责任型模式是什么? 在责任链模式中很多对象都是由每一个对象对其下家的引用而联接起来形成一条责任链.请求在链上传递,直到链上的某一个对象决定处理次请求.发出这个请求的客户并不知道链上的哪一个对象最终处理 ...

  7. 【设计模式系列19】状态模式原理分析及其和策略模式,责任链模式的区别

    状态模式原理分析 设计模式系列总览 前言 什么是状态模式 状态模式示例 状态模式角色 状态模式与责任链模式 状态模式与策略模式 状态模式应用场景 状态模式优缺点 总结 设计模式系列总览 设计模式 飞机 ...

  8. 状态模式与责任链模式

    文章目录 一.状态模式 二.责任链模式 三.状态模式与责任链模式对比 一.状态模式 状态模式定义:当一个对象的内在状态改变时允许其改变行为,这个对象看起来像是改变了其类.也就是说类中的状态改变了,再调 ...

  9. 【深入设计模式】责任链模式—责任链模式及责任链模式在源码中的应用

    文章目录 1. 责任链模式 1.1 责任链模式简介 1.2 责任链模式结构 1.3 责任链模式示例 2. 责任链模式在源码中的应用 2.1 Servlet 中的责任链模式 2.2 Spring 中的责 ...

  10. 行为型模式之责任链模式

    责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链.这种模式给与请求的类型,对请求的发送者和接收者进行解耦.这种类型的设计模式属于行为型模式 在 ...

最新文章

  1. Windows下编译TensorFlow1.3 C++ library及创建一个简单的TensorFlow C++程序
  2. 使用python 提取html文件中的特定数据
  3. [转].Net实现本地化简易教程
  4. 这10篇 iOS 热文,你别错过哦
  5. 网络营销常用工具与资源
  6. php 页面开启错误提示,php开启与关闭错误提示
  7. java安卓j建立进程_Android应用进程的创建过程
  8. 梅特勒托利多xk3124电子秤说明书_托利多电子秤使用说明
  9. python tracer函数_Python流程控制常用工具和函数定义
  10. JavaScript文档对象模型DOM节点操作之兄弟节点(4)
  11. java路径两种写法/和\\
  12. oracle 11.2 awr,oracle 11g database获取AWR报告
  13. 狸窝全能视频转换器功能介绍
  14. 深度Linux声卡驱动安装,Deepin Linux 的声卡驱动有点小问题
  15. 与PHP对抗招聘者垃圾邮件-概念证明
  16. 算法题 - 数字游戏问题 - Python
  17. 结合深度学习检测心脏 智能戒指体积小又准确
  18. html 源码_HTML实例之搜索栏(附源码)
  19. python第二阶段(2)入门-数据科学包 pandas
  20. 读《谨言慎行的力量 - 向南怀瑾学律己》

热门文章

  1. App Inventor自定义插件Extension
  2. Ffmpeg视频压缩
  3. 郭盛华技术有多牛?外媒:稳坐亚洲第一
  4. 【07月04日】指数估值排名
  5. 鱼塘钓鱼题解(堆解决)
  6. Kotlin学习笔记八-数据代理类型,接口与抽象类
  7. 计算机电脑设置音量,电脑声卡设置步骤【图文教程】
  8. Translation QA 检查
  9. 可调稳压电源lm317实验报告_LM317可调稳压电源
  10. Google高级搜索技巧之高级语法查询指令