Технологии разработки программного обеспечения


Паттерн Команда


Паттерн Команда (Command) выполняет преобразование запроса в объект, обеспечивая:

q       параметризацию клиентов с различными запросами;

q       постановку запросов в очередь и их регистрацию;

q       поддержку отмены операций.

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

q       объекты параметризируются действием. В процедурных языках параметризация осуществляется при помощи функции обратного вызова, которая регистрируется для последующего вызова. Паттерн Команда предлагает объектно-ориентированную замену функций обратного вызова;

q       необходимо обеспечить отмену операций. Это возможно благодаря хранению истории выполнения операций;

q       необходимо регистрировать изменения состояния для восстановления системы в случае аварийного отказа;

q       необходимо создание сложных операций, которые строятся на основе примитивных операций.

Решение. Основным элементом решения является абстрактный класс Команда, обеспечивающий одну абстрактную операцию Выполнять(). Конкретные подклассы этого класса реализуют операцию Выполнять(). Они задают пару получатель-действие. Получатель запоминается в экземплярной переменной подкласса. Запрос получателю посылается в ходе исполнения конкретной операции Выполнять().

Структурная составляющая паттерна Команда показана на рис. 12.54. Классы этой структуры имеют следующие обязанности:

q       Команда объявляет интерфейс для выполнения операции;




Начало  Назад  Вперед



Книжный магазин