大维德选媳妇之责任链模式

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

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

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

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 {

    @Override
    protected 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 {

    @Override
    protected 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 {
    @Override
    protected 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 总结

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要对接维德路特TLS4液位仪,需要先了解液位仪的通信协议和接口。一般情况下,液位仪与外界的通信都是通过串口进行的。因此,我们可以使用Java中的串口通信库来实现与液位仪的通信。 具体实现步骤如下: 1. 首先,需要找到Java中适用于串口通信的库。目前比较常用的有jSerialComm和RXTX等,你可以根据自己的需要选择一种。 2. 然后,通过串口连接液位仪。通常情况下,液位仪的通信协议是标准的RS232或RS485协议。因此,需要使用串口线将计算机的串口连接到液位仪的串口上。 3. 在Java代码中,首先需要打开串口,并设置串口的波特率、数据位、停止位和校验位等参数。具体的参数设置应根据液位仪的通信协议而定。 4. 连接成功后,就可以开始向液位仪发送指令,并读取液位仪返回的数据。液位仪的指令格式和返回数据格式一般都是由厂家提供的协议文档中说明的,需要按照文档的要求进行编写和解析。 5. 最后,根据液位仪返回的数据,可以进行相应的处理和显示。比如,可以将液位仪返回的数据通过GUI界面呈现出来,或者将数据存储到数据库中。 需要注意的是,液位仪的通信协议可能会因为不同的厂家而有所不同,因此在对接液位仪时,要特别注意协议的解析和处理。同时,在实现过程中,还需要考虑到异常处理、线程安全等问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值