Что такое?
Во-вторых, в книге Head First Design Patterns этот поведенческий шаблон позволяет избежать связывания отправителя запроса с его получателем, предоставляя более чем одному объекту возможность обработать запрос. Цепляйте принимающие объекты и передайте запрос по цепочке, пока объект его не обработает.
Где использовать?
Этот шаблон можно использовать в любой системе, в которой требуется цепочка для обработки запроса и избегания сопряжения решений if/else для каждого нового дескриптора, например, тележки для покупок, супермаркета и т. д.
Как использовать?
На рисунке в разделе «Пример» показано, как работают классы. Основная идея состоит в том, чтобы изолировать каждое правило/решение/и т. д. по классам, и этот класс должен быть вложен в «цепочку».
Пример
Сначала давайте посмотрим на GOF, а затем посмотрим, как я справляюсь в этом примере. Диаграммы были сделаны с помощью mermaid и hackmd.io.
* Классы моделей, такие как ShoppingCart/Item, доступны на github.
Теперь ожидаемый класс и код получены из IDE. Код также доступен в github.
Создайте интерфейс функции, чтобы иметь запрос дескриптора
Добавьте абстракцию в класс для поддержки некоторых операций конкретного класса.
Добавьте класс реализации для каждого вида скидки
КупитьТриОплатитьДва
И, наконец, основной способ их выполнения. Кстати, для них есть юнит-тесты.
Спасибо, что дошли до конца этого урока, увидимся в следующем :).
Спасибо,
Луис