栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

徒手撸设计模式-责任链模式

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

徒手撸设计模式-责任链模式

概念

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

在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。

参考链接: 责任链模式 | 菜鸟教程

代码案例

写个要钱抽象类
public  abstract class AskMoney {
    protected  double howMuch;
    
    protected AskMoney askMoneyNext;

    public void setAskMoneyNext(AskMoney askMoneyNext) {
        this.askMoneyNext = askMoneyNext;
    }

    
    public String ask(double howMuchMoney){
        String ask = null;
        //如果钱够,直接要,如果不够找下一个
        if (howMuch<=howMuchMoney){
            ask = askForWho(howMuchMoney);
        }else {
            if (Objects.nonNull(askMoneyNext)){
                ask = askMoneyNext.ask(howMuchMoney);
            }
        }
        return ask;
    }

    
    abstract protected String  askForWho(double howMuchMoney);
}

两个继承的子类

向父亲要
@Slf4j
public class AskMoneyForFather extends AskMoney {

    public AskMoneyForFather(double howMuch) {
        this.howMuch=howMuch;
    }

    @Override
    protected String askForWho(double howMuchMoney) {
        log.info("给老爸要 {}",howMuchMoney);
        return "给老爸要 "+howMuchMoney;
    }
}

向母亲要
@Slf4j
public class AskMoneyForMother extends AskMoney {

    public AskMoneyForMother(double howMuch) {
        this.howMuch=howMuch;
    }

    @Override
    protected String askForWho(double howMuchMoney) {
        log.info("给老妈要 {}",howMuchMoney);
        return "给老妈要 "+howMuchMoney;
    }
}
public class ResponsibilityChainUtil {
    public static AskMoney getChainOf(){
        AskMoney askMoneyFa= new AskMoneyForFather(1000);
        AskMoney askMoneyMo= new AskMoneyForMother(500);
        askMoneyFa.setAskMoneyNext(askMoneyMo);
        return askMoneyFa;
    }
}

测试主类
@RestController
@RequestMapping("/designPattern")
@Slf4j
public class DesignController {

    @PostMapping("/responsibilitychain")
    public ResponseModel responsibilitychain(@RequestBody List howMuch) {
        log.info("responsibilitychain   ---- start ");
        AskMoney chainOf = ResponsibilityChainUtil.getChainOf();
        List list = new ArrayList<>();
        for (Double much : howMuch) {
            list.add(chainOf.ask(much));
        }
        log.info("responsibilitychain   ---- end ");
        return new ResponseModel("责任链模式完成", 200,list);
    }
}

测试案例

2022-06-26 19:27:34.953 INFO  responsibilitychain   ---- start  【http-nio-8081-exec-2】【DesignController:67】
2022-06-26 19:27:39.786 INFO  给老妈要 600.0 【http-nio-8081-exec-2】【AskMoneyForMother:15】
2022-06-26 19:27:39.787 INFO  给老爸要 4000.0 【http-nio-8081-exec-2】【AskMoneyForFather:15】
2022-06-26 19:27:39.788 INFO  responsibilitychain   ---- end  【http-nio-8081-exec-2】【DesignController:73】

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/995942.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号