09.04.2016 Views

Priemioop

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 />

изменять не нужно.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!