我希望对“责任链”模式有一种直观的感觉。我想一个很好的方法就是了解一些现实世界的例子。你们能分享这样的例子吗?
关于这种模式的一个问题是,如果链具有多个阶段,比如10个以上,那么实现就会非常难看。你们对此做了什么?
答案 0 :(得分:3)
我认为Servlet filters就是一个很好的例子。该链条是为您而建的,您可以决定拨打下一个链。但是这里的建筑/布线是为你完成的。
如果10是毛茸茸的,你可以简化建筑师:
interface ChainElement {
void setNext(ChainElement next);
void doSomething();
}
class ChainBuilder {
private ChainElement first;
private ChainElement current;
public ChainBuilder then(ChainElement next) {
if (current == null) {
first = current = next;
} else {
current.setNext(next);
current = next;
}
return this;
}
public ChainElement get() {
return first;
}
}
然后在施工:
ChainElement chain = new ChainBuilder()
.then(new FirstElement())
.then(new SecondElement())
.then(new ThirdElement())
.get();
chain.doSomething();