Chain of Responsibility - пропустить запрос через все цепочки

Я просмотрел сеть, но не смог найти ответ на свой вопрос...

Допустим, у меня есть 3 цепи. Я хочу, чтобы запрос прошел все 3 цепочки (не имеет значения, может ли цепочка обработать запрос или нет). Можно ли использовать шаблон CoR для этой проблемы?

Чтобы объяснить это лучше - у меня есть список, который должен пройти через несколько наборов правил. Если он проходит 1-е правило, список остается прежним. Затем он переходит ко 2-му правилу, а 2-е правило меняет список. Измененный список переходит к 3-му правилу, он проходит, и измененный список сохраняется. Цепи

1 ответ

Решение

Хм, я не вижу контраргумента, чтобы этого не делать.

Вы можете просто объявить свой Processor или как вы это называете:

abstract class Processor {
    private Processor successor;

    public void setSuccessor(Processor successor) { this.successor = successor; }

    public List process(List input) {
        List processed = this.internalProcess(input);
        if (successor != null) { return successor.process(processed); }
        return processed;
    }

    protected abstract List internalProcess(List input);

}

и тогда вы можете определить, например:

public class ProcessorNoProcess extends Processor {

    @Override protected List internalProcess(List input) { 
       // do nothing
       return input;
    }
}

Это то, что вы спрашивали?

Другие вопросы по тегам