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