职责链模式demo实例
-
定义接口BaseChain
-
public interface BaseChain { public abstract void execute(); public abstract void setNextChain(BaseChain nextChain); }
-
-
定义抽象类AbstractChain, 给出执行下一条链的默认实现
-
public abstract class AbstractChain implements BaseChain { private String chainName; private BaseChain nextChain; public AbstractChain(BaseChain nextChain) { this.nextChain = nextChain; } public AbstractChain(){}; public AbstractChain(String chainName) { this.chainName = chainName; } public AbstractChain(String chainName,BaseChain nextChain) { this.chainName = chainName; this.nextChain = nextChain; } public BaseChain getNextChain() { return nextChain; } public void setNextChain(BaseChain nextChain) { this.nextChain = nextChain; } public String getChainName() { return chainName; } public void setChainName(String chainName) { this.chainName = chainName; } public void executeNext(){ if(nextChain != null){ nextChain.execute(); } } }
-
-
具体的链条节点, 这里给出两个节点, 扩展节点只需要继承AbstractChain
-
public class ConcreteChainA extends AbstractChain { private final static String defaultChainName = "链条A"; public ConcreteChainA(){ super.setChainName(defaultChainName); } public ConcreteChainA(String chainName){ super.setChainName(chainName); } public ConcreteChainA(BaseChain nextChain){ super(nextChain); } public ConcreteChainA(String chainName,BaseChain nextChain){ super(chainName,nextChain); } @Override public void execute() { // doSomething System.out.println(this.getChainName() + " execute"); executeNext(); } }
-
public class ConcreteChainB extends AbstractChain { private final static String defaultChainName = "链条B"; public ConcreteChainB(){ super.setChainName(defaultChainName); } public ConcreteChainB(String chainName){ super.setChainName(chainName); } public ConcreteChainB(BaseChain nextChain){ super(nextChain); } public ConcreteChainB(String chainName, BaseChain nextChain){ super(chainName,nextChain); } @Override public void execute() { // doSomething System.out.println(this.getChainName() + " execute"); executeNext(); } }
-
-
测试实例
-
public class ChainPatternTest { public static void main(String[] args) { // 创建职责链 BaseChain concreteChainA = new ConcreteChainA("链条一"); BaseChain concreteChainB = new ConcreteChainB("链条二"); concreteChainA.setNextChain(concreteChainB); // 执行链条 concreteChainA.execute(); // 结果 // 链条一 execute // 链条二 execute concreteChainB.execute(); // 结果 // 链条二 execute } }
-