🕵️
Введение в паттерны
  • Введение в паттерны
  • Паттерны
    • Оглавление
    • Порождающие паттерны
      • Фабричный метод
        • Реализации на С++
        • Реализации на Kotlin
        • Возможные реализации для решения конкретных задач на С++
      • Абстрактная фабрика
        • Реализации на С++
        • Реализации на Kotlin
        • Возможные реализации для решения конкретных задач на С++
      • Прототип
        • Реализации на С++
        • Реализации на Kotlin
        • Реализации на Java
        • Возможные реализации для решения конкретных задач на С++
      • Строитель
        • Реализации на С++
        • Реализации на Kotlin
      • Одиночка
        • Реализации на C++
        • Реализации на Kotlin
        • Возможные реализации для решения конкретных задач на С++
      • Пул объектов
        • Реализации на С++
    • Структурные паттерны
      • Адаптер
        • Реализации на С++
        • Реализации на Kotlin
        • Возможные реализации для решения конкретных задач
      • Декоратор
        • Реализации на С++
        • Реализации на Kotlin
      • Компоновщик
        • Реализации на С++
      • Мост
        • Реализации на С++
      • Заместитель
        • Реализации на С++
        • Реализации на Kotlin
      • Фасад
        • Реализации на С++
      • Приспособленец
        • Реализации на С++
    • Поведенческие паттерны
      • Стратегия
        • Реализации на С++
        • Реализации на Kotlin
      • Команда
        • Реализации на С++
        • Реализации на Kotlin
      • Цепочка обязанностей
        • Реализации на С++
        • Реализации на Kotlin
      • Подписчик-издатель
        • Реализации на С++
        • Реализации на Kotlin
      • Посетитель
        • Реализации на С++
        • Возможные реализации для решения конкретных задач
      • Посредник
        • Реализации на С++
        • Реализации на Kotlin
      • Шаблонный метод
        • Реализации на С++
      • Опекун
        • Реализации на С++
      • Итератор
        • Реализации на С++
        • Реализации на Kotlin
      • Свойство
        • Реализации на С++
        • Возможные реализации для решения конкретных задач
  • Введение в идиомы
  • Идиомы
    • Оглавление
    • RAII
    • Type erasure
      • Контейнеры с type erasure
    • CRTP
    • Статический полиморфизм
    • Shrink to fit
    • Proxy
    • Erase remove
    • Decltype (auto)
    • Copy and swap
    • Safe bool
    • Scope guard
    • Addressof
Powered by GitBook
On this page
  • Назначение
  • Решаемые задачи
  • UML диаграмма
  • Преимущества
  • Недостатки
  • Связь с другими паттернами

Was this helpful?

  1. Паттерны
  2. Поведенческие паттерны

Команда

Command

PreviousРеализации на KotlinNextРеализации на С++

Last updated 1 year ago

Was this helpful?

Назначение

Паттерн Команда (Command) — это поведенческий шаблон проектирования, который позволяет инкапсулировать запрос на выполнение действия в виде отдельного объекта. Создается абстрактный интерфейс, который определяет метод, используемый для выполнения команд. Каждая конкретная команда реализует этот интерфейс и предоставляет свою собственную реализацию метода, соответствующую своей операции. Используется когда необходимо управлять последовательным выполнением действий над объектом.

Решаемые задачи

  • Организация очереди или журнала действий

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

  • Разделение ответственностей

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

  • Реализация набора действий над объектом

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

UML диаграмма

Преимущества

  1. Уменьшение зависимости между объектами. Это связано с тем, что объекты-инициаторы не привязаны напрямую к объектам, которые выполняют операции.

  2. Возможность формирования очереди команд.

  3. Унификация обработки событий или запросов к системе. Паттерн повзоляет инкапсулировать операции в отдельные команды и предоставляет единый интерфейс для их обработки.

Недостатки

  1. Требуется изначально знать, кто может обработать команду и какое конкретное действие должно быть совершено.

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

  3. Увеличение количества и усложнение структуры кода за счет появления новых иерархий классов.

Связь с другими паттернами

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

Используя паттерн , можно создавать сложные команды, состоящие из нескольких простых команд или даже других составных команд. Это позволяет строить иерархические структуры команд.

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

Цепочка обязанностей
Компоновщик
Фабричный метод
UML диаграмма паттерна "Команда"