• 设计模式之责任链模式


    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
  • 相关阅读:
    Java集合知识点速查(JDK8)
    cordon节点,drain驱逐节点,delete 节点
    docker安装RabbitMQ和延时插件
    自动气象站和气象信息网络
    c语言fprintf、fscanf、sscanf以及sprintf函数知识要点总结
    java 数据结构 ArrayList源码底层 LinkedList 底层源码 迭代器底层
    深入解析JVM G1 垃圾回收器
    Reactor And Gev 详解 通俗易懂
    ESP32---logging库
    动力节点索引优化解决方案学习笔记——索引介绍
  • 原文地址:https://blog.csdn.net/qq_37221991/article/details/133785542