You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
Паттерн Command<br />
a Invoker (Menultem) - инициатор:<br />
- обращается к команде для выполнения запроса;<br />
a Receiver (Document, Application) - получатель:<br />
- располагает информацией о способах выполнения операций, необходимых<br />
для удовлетворения запроса. В роли получателя может выступать<br />
любой класс.<br />
Отношения<br />
а клиент создает объект ConcreteCommand и устанавливает для него получателя;<br />
а инициатор Invoker сохраняет объект ConcreteCommand;<br />
а инициатор отправляет запрос, вызывая операцию команды Execute. Если<br />
поддерживается отмена выполненных действий, то ConcreteCommand перед<br />
вызовом Execute сохраняет информацию о состоянии, достаточную<br />
для выполнения отката;<br />
а объект ConcreteCommand вызывает операции получателя для выполнения<br />
запроса.<br />
На следующей диаграмме видно, как Command разрывает связь между инициатором<br />
и получателем (а также запросом, который должен выполнить последний).<br />
Результаты<br />
Результаты применения паттерна команда таковы:<br />
а команда разрывает связь между объектом, инициирующим операцию, и объектом,<br />
имеющим информацию о том, как ее выполнить;<br />
а команды - это самые настоящие объекты. Допускается манипулировать ими<br />
и расширять их точно так же, как в случае с любыми другими объектами;<br />
а из простых команд можно собирать составные, например класс MacroCommand,<br />
рассмотренный выше. В общем случае составные команды описываются<br />
паттерном компоновщик;<br />
а добавлять новые команды легко, поскольку никакие существующие классы<br />
изменять не нужно.