Пост защищен, но я хочу дать ответ, потому что думаю, что он может быть улучшен.
Цепочка ответственности и фильтры.Это одно и то же?
Шаблон фильтра находится рядом с шаблоном цепочки ответственности.
Но этого достаточно, чтобы не смешивать их.
Было бы жаль использовать один и тот же термин для выражения двух разных концепций.
В шаблоне фильтра / перехватчика у нас нет понятия ответственности, посколькунесколько узлов цепочки могут воздействовать на один и тот же поток, и в соответствии с шаблоном он был создан для нескольких обработок.Узлы цепочки не обрабатывают запрос, они участвуют в обработке запроса.
Таким образом, фильтр или перехватчик - это скорее цепочка обработки, чем цепочка ответственности.
Например, АОПработает как фильтры и перехватчики.Мы хотим повторить некоторую обработку из стека процессоров.
Это не вопрос ответственности, а вопрос многоуровневой обработки, которую мы применяем согласно некоторым условиям или нет.Это имеет важные последствия для реализации и логики, лежащей в ее основе.
Фильтры / перехватчики, хранящиеся в цепочке, могут иметь (и часто не имеют) логическую или функциональную связь между ними, в то время как узлы цепочки ответственности всегда имеют логику или функционалотношения между ними, так как они должны решать ту же проблему.Например, в цепочечном фильтре первый фильтр может обрабатывать проблему журналирования, второй фильтр, проблему безопасности и последнюю, проблему кодирования ...
В цепочке ответственности эта же проблема обрабатывается всеми узламицепочка.
Ссылка GOF Цепочка ответственности Намерение:
Избегайте привязки отправителя запроса к его получателю, давая возможность обрабатывать более чем одному объектузапрос.Цепочка получения объектов и передачи запроса по цепочке, пока объект не обрабатывает его.В схеме цепочки ответственности цепочка останавливается, когда узел цепочки обрабатывает это.
Теперь я кратко опишу, что это такое и при использовании его на простом и конкретном примере.
Что такое цепь ответственности?
Шаблон проектирования цепи ответственности является поведенческим шаблоном.Как и все шаблоны проектирования GOF, его имя подходит ему идеально, поскольку шаблон определяет запрос для обработки, цепочку объектов, которые по очереди могут остановить обработку цепочки и ответить на запрос.Этот шаблон предлагает в качестве преимущества для разделения компонентов цепи.Таким образом, мы можем обновлять компоненты независимо и динамически создавать цепочку.
При использовании цепочки ответственности?
В цепочке ответственности только один объект может занятьответственность ответить на запрос.Если мы хотим, чтобы более чем один кандидат мог действовать по запросу, мы избегаем цепочки ответственности.Мы находимся в цепочке обработки.Шаблон фильтра предназначен для такого рода потребностей.
Шаблон цепочки ответственности применяется в нескольких контекстах: как технический, так и бизнес.
Обработка внутренних и пользовательских событий в пользовательских интерфейсах часто описывается.В этом контексте цепочка позволяет графическим слоям и компонентам обрабатывать вводимые пользователем данные, такие как щелчки мыши, нажатые клавиши и т. Д., А также внутреннюю обработку, такую как обработка графического обновления.
Пример с цепочкой ответственности
Мы рассмотрим пример нажатия универсальной кнопки, чтобы проиллюстрировать это.
Кнопка "«универсальный», поскольку его поведение зависит от контекста.
Идея состоит в том, что графические компоненты сортируются в цепочке от более локального компонента, связанного с действием пользователя, к менее локальному компоненту, связанному с действием пользователя.
Как только компонент цепочки решает обработать запрос, поток цепочки останавливается.
ОнВот пример, иллюстрирующий это.
Представьте себе кнопку «сохранить» в строке меню приложения для работы с электронными таблицами.
Сохранение документа, содержащего 2 электронные таблицы, не должно выполняться первой или второй электронной таблицей, поскольку они не должныбыть непосредственно связанными между ними.
Предположим, что при нажатии кнопки "Сохранить" представление отображается во второй электронной таблице.Таким образом, цепочка выполняется путем запуска вторым компонентом электронной таблицы, поскольку он является более локальным компонентом, связанным с действием.Второй компонент электронной таблицы не считает ответственным обрабатывать запрос, поэтому он позволяет обрабатывать его компоненту более высокого уровня, например, компоненту приложения.Когда он получает запрос, компонент приложения имеет всю необходимую информацию для обработки запроса на сохранение, поэтому он выполняет его.
Наоборот, в случаях, когда в документе имеется только одна электронная таблица, мы можем представить, что действие можетвыполняется компонентом электронной таблицы, который самодостаточен.