Паттерн проектирования в TypeScript: Командный паттерн

## Подкласс паттерна

Поведенческие паттерны проектирования
Поведенческие паттерны проектирования связаны с алгоритмами и распределением обязанностей между объектами.

Определение

Инкапсуляция запроса в виде объекта, что позволяет параметризовать клиентов с различными запросами и поддерживать отменяемые операции.

Превращает запрос в отдельный объект, содержащий всю информацию о запросе. Это преобразование позволяет передавать запросы в качестве аргументов метода, задерживать или ставить в очередь выполнение запроса, а также поддерживать отменяемые операции.

Имена Psudo

Действия, транзакция

Зачем нужен

  1. Предположим, вы создаете приложение для работы с текстовым редактором. Вы хотите создать набор инструментов пользовательского интерфейса, включающий такие объекты, как кнопки и меню, которые выполняют запрос в ответ на ввод пользователя.
  2. Только приложения, использующие этот набор инструментов, знают, что должно быть сделано с тем или иным объектом.
  3. Как разработчики инструментария мы не можем знать получателя запроса или операцию, которую он выполнит.

У вас есть общий класс Button, который можно использовать на панели инструментов, а также для общих кнопок на различных панелях инструментов.

Хотя все эти кнопки выглядят одинаково, они выполняют разные действия.

САМОЕ ПРОСТОЕ РЕШЕНИЕ – СОЗДАТЬ МНОЖЕСТВО ПОДКЛАССОВ ДЛЯ КАЖДОГО МЕСТА, ГДЕ ИСПОЛЬЗУЕТСЯ КНОПКА. ПОДКЛАССЫ ДОЛЖНЫ СОДЕРЖАТЬ КОД, КОТОРЫЙ БУДЕТ ВЫПОЛНЯТЬСЯ ПРИ НАЖАТИИ НА КНОПКУ.

Итак, что не так с этим подходом

  1. Вы имеете огромное количество подклассов
  2. код будет ломаться в подклассе в случае модификации базового класса Button
  3. некоторые логические операции, такие как копирование/вставка в данном случае в текстовом редакторе, придется вызывать из нескольких мест:
  • Пользователь нажимает кнопку копирования на панели инструментов или копирует что-то с помощью CTRL+C или CMD+C

Решение

  1. Разделение проблем
  2. Разбить приложение на несколько слоев

Паттерн команды интуитивно говорит, что отправка запроса путем извлечения всех требований для принятия решения, таких как вызываемый объект, имя метода и список аргументов, в один класс команды с единственным методом, который вызывает запрос.

Архитектура команды:

Следующий шаг – заставить ваши команды реализовать один и тот же интерфейс. Обычно он состоит из единственного метода выполнения, который не принимает никаких параметров. Этот интерфейс позволяет вам использовать различные команды с одним и тем же отправителем запроса, не связывая его с конкретными классами команд. В качестве бонуса, теперь вы можете переключать объекты команд, связанные с отправителем, эффективно изменяя поведение отправителя во время выполнения.

Пример кода:

В случае, если приведенный выше пример не загрузился :
url редактора Stack Blits

url приложения Stack Blits

Оцените статью
Procodings.ru
Добавить комментарий