Я реализую цепочку ответственности.Цепь ответственности: петля или следующая?
У меня есть разные политики, которые могут быть объединены в список, и у меня есть Процессор, который обрабатывает список политик. Каждая политика может обрабатывать CustomInput и может выбирать, нужно ли обрабатывать остальные политики.
interface Policy {
public boolean process(CustomInput input);
}
interface Processor {
public void process(List<Policy> policies, CustomInput input)
}
Я собирался реализовать процессор циклического по списку политик и проверкой логического результата каждого знать, следует ли продолжать с остальной частью политики.
Мой коллега предложил передать следующую Политику каждой Политике и дать им возможность позвонить (или нет) следующей (например, FilterChain).
Мой вопрос заключается в следующем:
Есть ли какие-либо преимущества я не вижу во втором растворе (проходя следующую политику в настоящее время обработки одного) над циклом по каждой политики и проверки его результат?
В первом случае ведущий оператор несет ответственность за применение всех политик. во втором случае каждая политика должна знать свою подполитию и может решить применить ее или нет. Это вопрос того, где вы ставите ответственность за применение политики. – njzk2
Бывают случаи, когда такой шаблон становится накладным, это также следует учитывать. В то время как CoR приятно использовать, не забудьте KISS. Есть случаи и случаи, которые следует учитывать. – EProgrammerNotFound
@Matheus, в моем случае мне это нужно (список политик происходит откуда-то другого, а код обработки не знает, что они делают, только они должны быть обработаны, прежде чем он сможет продолжить следующий шаг). – Boris