![]() |
Шаблон программирования - Команда
В книге "ActionScript 3 Design Patterns" увидел пример использования этого шаблона - вызов сообщения по таймеру.
На его основе я попробовал сделать своё - вывод сообщения по щелчку мыши. В дальнейшем хочу сделать таким способом перетаскивание объектов на экране. Но ничего не получается, флэш при компилировании выдаёт ошибку "TestInterfaceOne.as, Line 38 1136: Incorrect number of arguments. Expected 1.". Вот сам код: IDrag.as Код AS3:
DragCommand.as Код AS3:
DragReceiver.as Код AS3:
DragInvoker.as Код AS3:
TestInterfaceOne.as Код AS3:
|
Думаю, 38-я строка не помешала бы.
Код AS3:
|
На сколько я это себе предствляю, этот шаблон происходит от ограниченности Java, в котором исполняемый код нельзя передать по ссылке. В AS3 в нем необходимости я никогда не замечал.
Т.е. если мы назовем Function - Command, а apply / call заменим на run / execute получим то же самое, только уже встроенное в плеер. |
@wvxvw, я правильно понимаю что ты рекомендуешь не использовать GoF Command, а просто дёргать нужный метод по ссылке?
|
2wvxvw: Команду можно параметризировать, а указатель на функцию - нет.
Кроме того, все таки этот паттерн, это не только Callback... А нечто большее... Хотя, конечно, в некоторых случаях, можно обойтись и функцией. |
Ну, как я понимаю из объяснения вики:
Цитата:
Код AS3:
Да, и судя по описанию, этот шаблон в общем случае в AS3 реализовать не возможно т.как у функции может не быть имени :) |
Это всего лишь один из примеров реализации...
Вот тут много ссылочек и примеров на тему http://seregaborzov.wordpress.com/20...mmand-pattern/ И коль скоро есть команды, зачастую их реализация несколько сложнее, чем указатель на функцию и массив ее параметров... P.S. Как один из примеров. У нас есть некоторая рпг-ка... Там есть всякие заклинания и прочяя ерундень... Любое заклинание содержит в себе команду, которая проделывает реальное действие. А сами команды вообще описываются в XML например или JSON или еще как то... Ну например так: Код AS3:
DealDamage - класс команды, написанный на AS damage - одно из свойств класса DealDamage... И как такое реализовать с помощью фунцкии? А возвращать команда ничего не должна... Ну или boolean, максимум... Хотя это тоже лишнее, потому что команда может выполняться отложено, но пользователь об этом знать не должен... |
По ссылке - там и мухи и повидло и чего только нет :) И транзакцию туда же приплели... Т.е. у понятия "транзакция" есть вполне опредленный смысл, который где-то отдаленно напоминает команду... но, так, на уровне "Мойша по телефону напел". Транзакция - это набор действий, в пределах которых гарантируется постоянство результата использованых выражений. Это восновном применимо к базам данных. Т.е. например,
Код:
select "foo" from T |
"Команда - паттерн поведения объектов. Инкапсулирует запрос как объект, позволяя тем самым задавать параметры клиентов для обработки соответствующих запросов, ставить запросы в очередь или протоколировать их, а также поддерживать отмену операций. Известен также под именем Action (действие), Transaction (транзакция)."(с)GoF
Вообще почитайте тогда это, если то что было выше вам не нравится http://pure-mvc.org/doku.php/patterns/behaviour/command Типа истинна в последней инстанции, потому как собственно авторами написана:) P.S. Хотя после фразы Цитата:
P.P.S. Почему команда не должна возвращать результат я написал. Но опять же это не правило, это то, как на мой взгляд должно это выгладить... А каждый все равно волен делать как ему хочется... Но если наша команда можт ставиться в очередь, о чем сказано в определении, возвращаемый результат не имеет смысла... |
|
| Часовой пояс GMT +4, время: 18:38. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.