责任链模式——行为型

102 阅读1分钟

1.白话文定义

将复杂逻辑拆成多个服务模块执行,每个模块之间通过next方法获取,而每个Handler都继承同一抽象类。

2. 角色

  1. 抽象处理类:定义抽象业务方法;
  2. 具体业务实现类:实现抽象类中的方法,并调用下个执行器;
  3. 客户端调用类。

3.类图

责任链类图.png

4. 代码实现

  • 抽象处理父类——AbstractChain
public abstract class AbstractChain {

    private AbstractChain abstractChain;

    public AbstractChain getNextChain() {
        return abstractChain;
    }

    public void setNextChain(AbstractChain abstractChain) {
        this.abstractChain = abstractChain;
    }

    public abstract void doHandle();
}
  • 具体实现类——ChainAImpl
public class ChainAImpl extends AbstractChain {
    @Override
    public void doHandle() {
        
        System.out.println("chainA doHandle");

        if (getNextChain() != null) {
            getNextChain().doHandle();
        }
    }
}
  • 具体实现类——ChainBImpl
public class ChainBImpl extends AbstractChain {
    @Override
    public void doHandle() {

        System.out.println("chainB doHandle");

        if (getNextChain() != null) {
            getNextChain().doHandle();
        }
    }
}
  • 客户端调用类
public class Main {
    
    public static void main(String[] args) {

        AbstractChain chainA = new ChainAImpl();
        AbstractChain chainB = new ChainBImpl();

        chainA.setNextChain(chainB);
        chainB.setNextChain(null);

        chainA.doHandle();
    }
}
  • 测试结果

WechatIMG15.png

5.优点

  1. 降低耦合度。
  2. 增加新的请求处理类很方便。

6.缺点

容易造成循环调用。

7.使用场景

同一请求,需要执行不同的逻辑,具体哪个对象处理该请求由运行时自动确定。

8.参考

责任链模式