Я пишу спецификацию, в которой я хочу указать (недвусмысленным образом), что программист использует этот шаблон:Как называется этот шаблон?
Мы должны применить несколько фильтров к данным, которые мы обрабатываем. Конфигурация позволяет создавать эти фильтры. Их может быть несколько, или нет. Я не хочу эту логику в классе экспорта (потому что в будущем она может стать большой, с различными фильтрами, которые мы не можем предвидеть сейчас). Я хочу, чтобы они запускались один за другим, поэтому я хочу попросить метод в классе экспорта: «addFilter», который должен хранить объекты во внутреннем массиве и затем выполнять их при выполнении фактического процесса экспорта ,
Я не знаю, достаточно ли ясен. Это похоже на целенаправленную стратегию, но не совсем стратегию, потому что не обязательно иметь фильтр.
Опять же, возникает вопрос: как я могу назвать этот шаблон в спецификациях?
Edit: пример того, что я пытаюсь сделать:
$report = new Report();
$report->addFilter(new RemoveSpaces())
->addFilter(new SubstituteText($predefined_substitutions_array)
->addFilter(new FixCapitals())
->addFilter(new Encode("utf8"));
echo($report->generate()); // filters are actually used during generation.
Предполагается, что пользователь должен иметь возможность решить, следует ли RemoveSpaces или нет, какой текст заменить, нужно ли капитализировать слова или нет, какую кодировку использовать и т. д. Некоторые фильтры, безусловно, будут добавлены в будущем на запрос пользователя (клиента, на самом деле).
После факторизуются, фильтры должны иметь простой интерфейс, что доклад будет назвать:
foreach($this->filters as $current_filter) {
$data = $this->filters[$current_filter]->applyTo($data);
}
Не могли бы вы добавить пример псевдокода, чтобы проиллюстрировать, о чем вы говорите? –
См. Отредактированный вопрос. –