责任链设计模式

时间:2014-07-30 15:30:32

标签: oop design-patterns chain-of-responsibility

我希望对“责任链”模式有一种直观的感觉。我想一个很好的方法就是了解一些现实世界的例子。你们能分享这样的例子吗?

关于这种模式的一个问题是,如果链具有多个阶段,比如10个以上,那么实现就会非常难看。你们对此做了什么?

1 个答案:

答案 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();
相关问题