1.白话文定义
将复杂逻辑拆成多个服务模块执行,每个模块之间通过next方法获取,而每个Handler都继承同一抽象类。
2. 角色
- 抽象处理类:定义抽象业务方法;
- 具体业务实现类:实现抽象类中的方法,并调用下个执行器;
- 客户端调用类。
3.类图
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();
}
}
- 测试结果
5.优点
- 降低耦合度。
- 增加新的请求处理类很方便。
6.缺点
容易造成循环调用。
7.使用场景
同一请求,需要执行不同的逻辑,具体哪个对象处理该请求由运行时自动确定。