在江苏中部泰州市有一个小城镇它叫泰兴,我们的主人公大维德就在这个县下面的一个街道。

我们的主人公大维家是一个开厂的小老板,另外他曾经是一个小包工头,属于有点小钱暴发户那种性质的把。

我们的主人公大维德虽然长的丑,但是没有办法,他有钞能力,他投胎投的好,投在了一个暴发户人家,丑又怎么样,可以拿钱弥补缺点呀,毕竟世俗面前,谁能拒绝金前的味道呢

1.责任链模式的应用场景

大维德爸爸觉得这个儿子基本上算是废了,整天吃喝嫖赌好吃懒做,想找个媳妇回来管管她,

暴发户人家的娶媳妇,总是有点要求的,所以他们一家人就在一起商量制定了如下的要求

  1. 大维德要求:腿要白要长,身材好要凹凸有致,年龄25 左右

  2. 大维德爸爸:学历最好高一点,智商也不能低,毕竟儿子废了,希望自己老了之后,儿媳妇能接管这个加工厂

  3. 大维德妈妈:希望贤良淑德,将来老了能够孝顺他们,给他们养老送终,毕竟儿子已经靠不住了

2.责任链模式涉及的角色

抽象处理者(Handler)角色:定义一个处理请求的接口,包含抽象处理方法和一个后继连接。

具体处理者(大维德,大维德爸爸,大维德妈妈)角色:实现抽象处理者的处理方法,判断本次请求能否满足要求,如果满足,则将该请求转给它的下一任处理着。

客户类(Client)角色:创建处理链,并向链头的具体处理者对象提交请求,它不关心处理细节和请求的传递过程。

3.利用责任链模式进行媳妇的挑选

3.1抽象处理者(Handler)角色:定义一个处理请求的接口,包含抽象处理方法和一个后继连接

/*** 抽象处理者。定义出一个处理请求的接口,提供对后续处理者的引用*/
@Data
public abstract class AbstractHandler {/*** 当前职责的下一个链*/private AbstractHandler nextHandler;public void doHandle(BeautifulGirl girl){/** 如果满足了当前处理人的要求,就进入下一个处理人 */boolean result = doValidate(girl);if(result && ObjectUtils.isNotEmpty(getNextHandler())){nextHandler.doHandle(girl);}/** 如果满足要求,且流程都走完了,那就通过了 */else if(result && ObjectUtils.isEmpty(getNextHandler())){System.out.println("恭喜你,通过了测试,可以选个良辰吉日与我儿大维德成婚");}else {System.out.println("抱歉,你没有满足要求,无法当大维德家的媳妇");}}/*** 具体执行校验逻辑的方法(每个人对女方的要求)* @param girl*/protected abstract boolean doValidate(BeautifulGirl girl);}

3.2 具体处理者(大维德、维德爸爸、维德妈妈)角色:实现抽象处理者的处理方法,判断能否处理本次请求,如果满足本次处理的请求,则将该请求转给它的后继者。

/** 大威德这种下半身动物 */
public class DavidHandler extends AbstractHandler {@Overrideprotected boolean doValidate(BeautifulGirl girl) {// 没有办法,暴发户对妹子的要求就是这么朴实无华if(girl.getAge() <= 25 &&  (girl.getStature().contains("前凸后翘") || girl.getStature().contains("大长腿")) ){System.out.println("身材年龄满足大维德的要求");return true;}System.out.println("被大维德淘汰了");return false;}
}/** 大维德爸爸对学历智商有要求 **/
public class DavidFatherHandler extends AbstractHandler {@Overrideprotected boolean doValidate(BeautifulGirl girl) {// 大威德爸爸对学历智商有要求if("硕士".equals(girl.getEducation()) || "博士".equals(girl.getEducation()) ){System.out.println("学历、智商满足大维德爸爸的要求");return true;}System.out.println("被大维德爸爸淘汰了");return false;}
}/** 大维德妈妈还是想的比较远,毕竟儿子不靠谱了,自己还是需要一个人养老送终 */
public class DavidMotherHandler extends AbstractHandler {@Overrideprotected boolean doValidate(BeautifulGirl girl) {// 大威德妈妈对是否孝顺、贤良淑德有要求if("孝顺".equals(girl.getFilialPiety()) || "贤良淑德".equals(girl.getFilialPiety()) ){System.out.println("孝顺、贤良淑德满足大维德妈妈的要求");return true;}System.out.println("被大维德妈妈淘汰了");return false;}
}

3.3 客户类(Client)角色:创建处理链,并向链头的具体处理者对象提交请求,它不关心处理细节和请求的传递过程。

public class ClientTest {public static void main(String[] args) {//我们先将三个子类串起来,类似于串糖葫芦,层级依次递进DavidHandler david = new DavidHandler();DavidFatherHandler davidFather = new DavidFatherHandler();DavidMotherHandler davidMother = new DavidMotherHandler();david.setNextHandler(davidFather);davidFather.setNextHandler(davidMother);// 创建想进入大维德家当少奶奶的人:子楣BeautifulGirl ziMei = new BeautifulGirl(23, "前凸后翘","本科", "开放");david.doHandle(ziMei);System.out.println("\n--------- 华丽的分割线  --------");// 大幂幂BeautifulGirl daMimi = new BeautifulGirl(25, "前凸后翘,大长腿","硕士", "孝顺");david.doHandle(daMimi);System.out.println("\n--------- 华丽的分割线  --------");// 某女网红BeautifulGirl wangHong = new BeautifulGirl(24,"前凸后翘","大专","认钱不认人");david.doHandle(wangHong);}}

3.4 运行结果如下:

身材年龄满足大维德的要求
被大维德爸爸淘汰了
抱歉,你没有满足要求,无法当大维德家的媳妇

--------- 华丽的分割线  --------
身材年龄满足大维德的要求
学历、智商满足大维德爸爸的要求
孝顺、贤良淑德满足大维德妈妈的要求
恭喜你,通过了测试,可以选个良辰吉日与我儿大维德成婚

--------- 华丽的分割线  --------
身材年龄满足大维德的要求
被大维德爸爸淘汰了
抱歉,你没有满足要求,无法当大维德家的媳妇

3.5 总结

责任链模式是将链中每一个节点看作是一个对象,每一个节点处理的请求均不同,且内部自动维护一个下一个节点对象。客户只需要将请求发送到责任链上即可,无须关心请求的处理细节和请求的传递过程,所以责任链将请求的发送者和请求的处理者解耦了。

责任分担: 每个类只需要处理自己该处理的工作,处理完传递给下一个对象完成,明确各类的责任范围,符合类的单一职责原则。

大维德选媳妇之责任链模式相关推荐

  1. android 链式结构,Android 架构师之路10 设计模式之责任链模式

    1. 责任链模式概念 1.1 介绍 客户端发出一个请求,链上的对象都有机会来处理这一请求,而客户端不需要知道谁是具体的处理对象.这样就实现了请求者和接受者之间的解耦,并且在客户端可以实现动态的组合职责 ...

  2. 责任链模式在业务实践中的思考与改进

    文章目录 背景 责任链基本应用 一些小问题: 读扩散问题 膨胀的上下文 消灭"幽灵字段" 大泥球Processor 总结 背景 众所周知,软件开发没有银弹,但总有一些经典的设计模式 ...

  3. Android使用责任链模式处理二维码扫描结果

    众所周知,二维码的扫描结果其实就是一个字符串,我们拿到一个结果需要对内容进行校验,是否是我们需要的信息,然后做一些特殊的处理.比如先判断是不是一个url链接,是则打开这个链接,不是的话进行下一种判断, ...

  4. 设计模式第七讲-责任链模式

    简介 责任链模式的定义:使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系 将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理他为止. 图例 责任链-根据事情大小来决 ...

  5. Netty框架之责任链模式及其应用

    Netty框架之概述及基本组件介绍 Reactor网络编程模型解析 前言 在上篇博客介绍完netty框架的基本组件介绍和概述,也跟着代码看了下NioEventLoopGroup的启动过程,以及基于Re ...

  6. java里面的环链怎么做_Java模式开发之责任链模式

    从前往后按照一定操作顺序进行  申明一个过滤器接口,里面有一个"方法申明" 叫 规则过滤,返回处理后的结果 申明一些具体的操作类,全部实现过滤器接口,重写里头规则过滤的方法,返回规 ...

  7. java 事件链_Java设计模式——责任链模式(Chain of Responsibility)

    责任链 责任链模式通俗来说就是关联一串能够处理事务的对象,使多个对象都有机会处理请求,从而避免了请求的发送者和接收者之间的耦合关系.将这些对象连成一条链,并沿着这条链传递该请求,直到有对象处理它为止. ...

  8. 采购申请的处理流程 --- 责任链模式

    前情提要 上集讲到小光梳理了公司的组织架构, 利用组合模式建立起了一个可扩展变化的多层的组织架构体系. 更清晰地明确了公司各个层级, 各个部门的职责. 大家明确职责, 通力合作, 让"小光热 ...

  9. [转]《JAVA与模式》之责任链模式

    http://www.cnblogs.com/java-my-life/archive/2012/05/28/2516865.html 在阎宏博士的<JAVA与模式>一书中开头是这样描述责 ...

最新文章

  1. 移动磁盘由于IO设备错误,要怎样寻回文件
  2. 06- web兼容性测试
  3. 2018,送给大家一份提升技术的宝典
  4. jquery的实时触发事件(textarea实时获取中文个数)
  5. Docker 环境:Nexus3.x 的私有仓库
  6. 《Hierarchical Attention Network for Document Classification》—— 用于文本分类的层次注意力网络
  7. apt-get install 时无法获得锁 /var/lib/dpkg/lock - open
  8. oc c语言,OC之C语言的基础知识
  9. 微信小程序获取unionid与openid
  10. 方法 手写promise_手写Promise类
  11. html div 监听事件无效,在AngularJS中将html替换为div后,Click事件不起作用
  12. 数据库安全问题?这里有10个最常见的
  13. UnityShader21:程序纹理
  14. 抢头条offer机会,抖音面试题:网络编程Socket+GC Roots+数据同步+Redis等
  15. Hyperledger Fabric教程(15)--基于Kafka的Order服务实战
  16. About scrum reports
  17. Java字符串排序设计(升序排列)
  18. Ubuntu16.04解决arpspoof时出现arpspoof: libnet_check_iface() ioctl: No such device问题
  19. 24点游戏(python)
  20. Android实现NFC芯片制造商识别

热门文章

  1. 全球15家大型烟草公司中,大多数都未能采取推进减少烟草危害的措施
  2. Gitlab 和项目管理
  3. not-null property references a null or transient value: 等关于cinema项目bug
  4. HTML清新卡通人物404单页源码分享
  5. 【ReID】Densely Semantically Aligned Person Re-Identification
  6. 给常用电脑者推荐一个护眼小工具
  7. 解决新版chrome无法手动拖动安装插件
  8. maven打包java项目为可执行jar文件,资源文件放在外面
  9. What's Great 2012
  10. 5G核心网与核心网演进