在责任链模式中,每个处理者对象都包含对下一个处理者的引用,形成一条链。
请求沿着链传递,直到有一个处理者能够处理为止
主要参与者有:
1、Handler处理者:定义一个请求接口。通常包含一个处理方法。如果可以处理请求则处理,否则,将请求传递给下一个处理者
2、ConcreteHandler 具体处理者:实现处理者接口,具体处理请求的对象。如果能处理则处理,不能则传递给下一个处理者
3、Clint客户端:创建处理者链。并向链的起始点提交请求。
Handler
/**
*升级的父接口
*/
public interface Upgrade{
// 升级
void doUpgrade();
// 当前升级的后一个处理者。@return后面一个升级的处理类,当前类是最后一个就返回null
Class<? extends Upgrade> nextUpgrade();
}
ConcreteHandler 实现处理者接口
@Service
public class UpgardeVersion implements Upgrade{
@Override
public void doUpgrade(){
// doSomething 升级操作
}
@Override
public Class<? extends Upgrade> nextUpgrade(){
return Next.class;
}
}
Clint客户端调用
public class Clint{
public static void main(String[] args){
// 组装升级路径
List<Upgrade> upgradeChain = new ArrayList<>();
Upgrade current = ApplicationContextUtil.getBean(//版本号);
if(current == null){return}
upgradeChain(current, upgradeChain);
for (Upgrade upgrade : upgradeChain) {
upgrade.doUpgrade();
}
}
// 递归组装升级路径
public void upgradeChain(Upgrade current, List<Upgrade> upgradeChain) {
Class<? extends Upgrade> nextUpgradeClass = current.nextUpgrade();
if (nextUpgradeClass != null) {
Upgrade nextUpgrade = ApplicationContextUtil.getBean(nextUpgradeClass);
upgradeChain.add(nextUpgrade);
upgradeChain(nextUpgrade, upgradeChain);
}
}
}