类型:行为型设计模式
输入一个请求,责任链模式将多个处理器节点连接成链,请求传入后依次进行校验处理,如果被拦截则由该处理器直接返回结果,否则传递至下一处理器节点,直到最后一个处理器节点处理完毕。
组成结构
责任链模式包括以下几个基本结构:
- 处理者(Handler):声明所有具体处理者的通用接口。习惯在 IxxxChain 中定义每个处理者都要实现的功能接口,在 IxxxChainArmory 中定义关于责任链的接口【appendNext() & next() 】;
- 基础处理者(Base Handler):所有处理者共用的样本代码,是抽象实现类。在这里面先实现责任链相关接口的功能;
- 具体处理者(Concrete Handlers):处理请求的实际代码。
- 客户端(Client):可根据程序逻辑一次性或者动态地生成链。习惯为 xxxChainFactory 。
实现流程
1.写责任链功能接口(IxxxChain)及装配接口(IxxxChainArmory);
2.用抽象类先将装配接口(IxxxChainArmory)的功能实现;
3.写每个责任链节点的具体功能(action())实现;
4.写一个责任链工厂DefaultActivityChainFactory;
- 通过Spring依赖注入自动装配
impl
中的接口实现类;- 给impl中的实现类添加 @
Component
注解,这样IActionChain
的实现类已经被Spring
管理, - 在类中只有一个构造器的情况下,
Spring
会尝试通过依赖注入来实例化该构造器。可以通过类型IActionChain
获取到impl
中的实现类。
- 给impl中的实现类添加 @
- 提供责任链节点枚举;
- (固定结构链条)在构造方法进行节点装配,组装出一个责任链的链条;
- 提供责任链的外部访问方法;
5.最后将责任链工厂在Support类中提供服务即可。
优点
- 可以控制请求处理的顺序;
- 单一职责原则,对流式的处理过程进行解藕;
- 开闭原则,可以在不修改现有代码的情况下,在程序中新增处理者。
应用
抽奖过滤器逻辑实现