设计模式之责任链模式

1.定义

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

2.实战

我们模拟电商订单的发货的最后几步流程。大概需要 打印 -> 包装 -> 称重 -> erp发货 -> 平台发货,这么几个步骤

但是有些商家有些步骤是一起完成的,有些商家是分开完成的,使用责任链模式,将这些步骤实现到具体的处理器中,各个处理逻辑可以排列组合,十分灵活
打印 包装 称重 erp发货 平台发货

  • Handler:抽象处理器
java 复制代码
    public abstract class Handler {
        abstract void process();
    }
  • PackHandler :子处理器
java 复制代码
   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("处理发货上传逻辑");
        }
    }
  • HandlerChain:处理器工具类
java 复制代码
   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();
        }
    }
}
  • 具体处理逻辑
java 复制代码
    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发货逻辑
        // 处理发货上传逻辑
    }

3.运用

  • springmvc 拦截器
  • filter 过滤器
  • netty ChannelHandler
相关推荐
Slow菜鸟2 天前
Spring 设计模式之责任链模式
spring·设计模式·责任链模式
zzzhpzhpzzz4 天前
设计模式——责任链模式
设计模式·责任链模式
凯雄,长沙起风了、6 天前
设计模式之责任链的通用实践思考
spring·设计模式·责任链模式·责任链实践
wrx繁星点点7 天前
责任链模式:解耦请求处理的设计模式
java·开发语言·设计模式·tomcat·maven·intellij-idea·责任链模式
?abc!8 天前
设计模式基础概念(行为模式):责任链模式(Chain Of Responsibility)
设计模式·责任链模式
迷路国王10 天前
Android 利用责任链模式来实现 解析不同的json对象
android·json·责任链模式
伯牙碎琴14 天前
十六、行为型(责任链模式)
责任链模式
麦克·唐21 天前
责任链模式(C++)
c++·责任链模式
王先生草1 个月前
设计模式---责任链模式快速demo
设计模式·责任链模式
anyup_前端梦工厂1 个月前
JS设计模式之职责链模式:优雅地处理请求流程
前端·javascript·设计模式·责任链模式