Что такое?

Во-вторых, в книге Head First Design Patterns этот поведенческий шаблон позволяет избежать связывания отправителя запроса с его получателем, предоставляя более чем одному объекту возможность обработать запрос. Цепляйте принимающие объекты и передайте запрос по цепочке, пока объект его не обработает.

Где использовать?

Этот шаблон можно использовать в любой системе, в которой требуется цепочка для обработки запроса и избегания сопряжения решений if/else для каждого нового дескриптора, например, тележки для покупок, супермаркета и т. д.

Как использовать?

На рисунке в разделе «Пример» показано, как работают классы. Основная идея состоит в том, чтобы изолировать каждое правило/решение/и т. д. по классам, и этот класс должен быть вложен в «цепочку».

Пример

Сначала давайте посмотрим на GOF, а затем посмотрим, как я справляюсь в этом примере. Диаграммы были сделаны с помощью mermaid и hackmd.io.

* Классы моделей, такие как ShoppingCart/Item, доступны на github.

Теперь ожидаемый класс и код получены из IDE. Код также доступен в github.

Создайте интерфейс функции, чтобы иметь запрос дескриптора

Добавьте абстракцию в класс для поддержки некоторых операций конкретного класса.

Добавьте класс реализации для каждого вида скидки

КупитьТриОплатитьДва

И, наконец, основной способ их выполнения. Кстати, для них есть юнит-тесты.

Спасибо, что дошли до конца этого урока, увидимся в следующем :).

Спасибо,

Луис