• 设计模式之责任链模式


    1.定义

    责任链模式是常见的行为型设计模式。当我们需要实现的业务逻辑需要通过多个步骤来处理,并且这些步骤有排列组合的场景时,就可以使用责任链模式

    2.实战

    我们模拟电商订单的发货的最后几步流程。大概需要 打印 -> 包装 -> 称重 -> erp发货 -> 平台发货,这么几个步骤
    但是有些商家有些步骤是一起完成的,有些商家是分开完成的,使用责任链模式,将这些步骤实现到具体的处理器中,各个处理逻辑可以排列组合,十分灵活

    打印
    包装
    称重
    erp发货
    平台发货
    • Handler:抽象处理器
        public abstract class Handler {
            abstract void process();
        }
    
    • 1
    • 2
    • 3
    • PackHandler :子处理器
       public class PackHandler extends Handler{
            @Override
            void process() {
                // 处理包装逻辑
                System.out.println("处理包装逻辑");
            }
        }
    
        public class WeightHandle  extends Handler{
            @Override
            void process() {
                // 处理称重逻辑
                System.out.println("处理称重逻辑");
            }
        }
    
        public class ConsignHandle extends Handler{
            @Override
            void process() {
                // 处理erp发货逻辑
                System.out.println("处理erp发货逻辑");
            }
        }
    
        public class ConsignUpdateHandle extends Handler{
            @Override
            void process() {
                // 处理发货上传逻辑
                System.out.println("处理发货上传逻辑");
            }
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • HandlerChain:处理器工具类
       public class HandlerChain {
        // 持有所有Handler:
        private final List<Handler> handlerList;
    
        public HandlerChain(List<Handler> handlerList) {
            this.handlerList = handlerList;
        }
    
        public void process() {
            for (Handler handler : handlerList) {
                handler.process();
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 具体处理逻辑
        public static void main(String[] args) {
            // 包装流程
            List<Handler> handlerList = new ArrayList<>();
            handlerList.add(new PackHandler());
            handlerList.add(new WeightHandle());
            handlerList.add(new ConsignHandle());
            handlerList.add(new ConsignUpdateHandle());
            HandlerChain handlerChain = new HandlerChain(handlerList);
            handlerChain.process();
            // 运行结果:
            // 处理包装逻辑
            // 处理称重逻辑
            // 处理erp发货逻辑
            // 处理发货上传逻辑
    
            // 称重流程
            List<Handler> handlerList1 = new ArrayList<>();
            handlerList1.add(new WeightHandle());
            handlerList1.add(new ConsignHandle());
            handlerList1.add(new ConsignUpdateHandle());
            HandlerChain handlerChain1 = new HandlerChain(handlerList1);
            handlerChain1.process();
            // 运行结果:
            // 处理称重逻辑
            // 处理erp发货逻辑
            // 处理发货上传逻辑
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    3.运用

    • springmvc 拦截器
    • filter 过滤器
    • netty ChannelHandler
  • 相关阅读:
    NOIP2023模拟12联测33 游戏
    git rebase和merge区别
    备忘录模式:对象状态的保存与恢复
    使用Python进行食品配送时间预测
    我在上海偶遇数字凤凰#坐标徐汇美罗城
    spring boot+redis 的快速入门
    RuntimeError: cuDNN error: CUDNN_STATUS_INTERNAL_ERROR
    XmlBeanDefinitionReader解读
    React组件三大属性state,props,refs
    Go 语言常见的 ORM 框架
  • 原文地址:https://blog.csdn.net/qq_37221991/article/details/133785542