设计模式 - 行为型 - 责任链模式学习

现象:

设计模式 - 行为型 - 责任链模式学习

实现:

介绍:一个请求在这种模式中,多个接收者处理,每个接收者都包含对下一个接收者的引用。
	 如果一个对象不能处理该请求,那么它会把请求传给下一个接收者,依此类推
适用:一个请求被多个接受者接受 但是每个接收者要求满足要求才处理 在处理消息的时候过滤

方法:

  1. 创建抽象的处理类
public abstract class AbstractHandle {
    /**
     * 判断接收者是否执行的条件
     */
    protected Integer flag;

    /**
     * 此接受者的下一个接收者
     */
    protected AbstractHandle nextHandle;

    /**
     * 设置下一个接受者
     */
    public void setNextHandle(AbstractHandle nextHandle) {
        this.nextHandle = nextHandle;
    }

    /**
     * 此接收者处理和下一个接受者调用
     *
     * @param flag
     * @param message
     */
    public void run(Integer flag, String message) {
        /**
         * 检查是否满足此接受者处理条件 满足则处理
         */
        if (this.flag.equals(flag)) {
            execute(message);
        }
        /**
         * 调用下一个接受者处理
         */
        if (nextHandle != null) {
            nextHandle.run(flag, message);
        }
    }

    /**
     * 抽象子类实现的真正处理方法
     *
     * @param message
     */
    protected abstract void execute(String message);

}
  1. 第一层接受者实现
public class FirstFloorHandle extends AbstractHandle {

    /**
     * 实例化第一层的时候 设置条件
     * @param flag
     */
    public FirstFloorHandle(Integer flag) {
        this.flag=flag;
    }

    @Override
    protected void execute(String message) {
        // 第一层接收者的实际处理
        System.out.println(message+"--第一层处理完成--");
    }

}
  1. 第二层接受者实现
public class SecondFloorHandle extends AbstractHandle {

    /**
     * 实例化第二层的时候 设置条件
     * @param flag
     */
    public SecondFloorHandle(Integer flag) {
        this.flag=flag;
    }

    @Override
    protected void execute(String message) {
        // 第一层接收者的实际处理
        System.out.println(message+"--第二层处理完成--");
    }
}

  1. 第三层接收者实现
public class ThirdFloorHandle extends AbstractHandle {

    /**
     * 实例化第三层的时候 设置条件
     * @param flag
     */
    public ThirdFloorHandle(Integer flag) {
        this.flag=flag;
    }

    @Override
    protected void execute(String message) {
        // 第三层接收者的实际处理
        System.out.println(message+"--第三层处理完成--");
    }
}
  1. 创建每层接受者 设置接受者里面的下一层接受者
    /**
     * 创建接受者 设置接受者里面的下一层接受者
     * @return 第一层处理者
     */
    private static AbstractHandle getHandle(){
        // 分别建立接受者
        var firstFloorHandle = new FirstFloorHandle(1);
        var secondFloorHandle = new SecondFloorHandle(2);
        var thirdFloorHandle = new ThirdFloorHandle(3);

        // 给接受者设置下一层接受者
        firstFloorHandle.setNextHandle(secondFloorHandle);
        secondFloorHandle.setNextHandle(thirdFloorHandle);

        // 返回第一层接受者
        return firstFloorHandle;
    }
  1. 测试调用
    public static void main(String[] args) {
        // 获取执行者
        var handle = getHandle();
        // 调用执行者方法执行
        handle.run(3, "开始处理:");
    }
  1. 调用handle.run(1, “开始处理:”);
    在这里插入图片描述
    调用handle.run(2, “开始处理:”);
    在这里插入图片描述

调用handle.run(3, “开始处理:”);
在这里插入图片描述

运用实例:

结合实际使用场景运用责任链
场景:某个接口接受前端参数处理要经过一步或者多步处理

一:建立执行数据模型和对象

1.建立责任链执行基础对象
在这里插入图片描述
2.建立责任链执行数据模型、在责任链中实际执行的模型、使用泛型控制执行的对象需要继承我们的基础对象
在这里插入图片描述
3.建立某链接中执行的实际对象
在这里插入图片描述

二:建立责任链接口与多层实现

1.建立责任链接口
在这里插入图片描述
2.建立第一层实际处理
在这里插入图片描述3.建立第二层实际处理

在这里插入图片描述
4.建立第三层实际处理
在这里插入图片描述

三:建立责任链容器 与 责任链处理Service
1.建立责任链容器
在这里插入图片描述
2.建立责任链处理Service
使用map 是因为可通过key的类型设置多个责任链来执行
如果只有一个责任链 可省去责任链容器对象 ProcessTemplate 直接将List 放ApplyService
在这里插入图片描述

四:使用spring容器初始化ApplyService 注入对应责任链

1.使用spring容器来控制责任链的初始化 代替之前的getHandle 获取创建接受者 设置接受者里面的下一层接受者 的方法
将ApplyService 注入到容器
在这里插入图片描述

五:controller调用

1.controller注入ApplyService 将接受参数转成我们的ProcessContext();
调用责任链处理 设置的type 可放枚举 来区分多个责任链
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值