|
2 / 2 / 2
Регистрация: 23.10.2016
Сообщений: 139
|
|
Использование и реализация паттерна "Команда"19.02.2017, 23:46. Показов 5269. Ответов 50
Метки нет (Все метки)
Вот схема паттерна (скриншот).
Прицепи, все довольно просто: есть инициатор (Invoker), который хочет, что бы получатель (Receiver) что либо выполнил, а само выполнение инкапсулируется классом КонкретнаяКоманда. 1. А что если инициатор и получатель это один и тот же объект? Для таких действий шаблон Команда подходит? Например: Пользователь ввел в 9 цифр и далее нажал на кнопку Shuffle. После чего эти цифры должны перемешаться. То есть, происходит действие над данными внутри одного класса. Либо еще пример: Пользователь ввел в 9 цифр и программа должна проверить их на корректность. 2. И вообще, насколько часто Вы используете паттерн Команда в своих приложениях (там где есть GUI). Вообщем помогите разобраться, а то я запутался.
0
|
|
| 19.02.2017, 23:46 | |
|
Ответы с готовыми решениями:
50
Реализация паттерна "Команда" Реализация паттерна Observer от Microsoft Реализация консольного меню с использованием паттерна "Команда" |
|
Модератор
3138 / 2286 / 469
Регистрация: 26.03.2015
Сообщений: 8,890
|
|
| 21.02.2017, 19:54 | |
|
0
|
|
|
Заблокирован
|
|
| 21.02.2017, 20:20 | |
|
0
|
|
|
Модератор
3138 / 2286 / 469
Регистрация: 26.03.2015
Сообщений: 8,890
|
|
| 21.02.2017, 20:22 | |
|
Ищите в гугле "инкапсулирование запроса в виде объекта".
0
|
|
|
Заблокирован
|
|||||||
| 21.02.2017, 22:03 | |||||||
|
http://flash2048.com/post/command То что там автор называет "командой", на деле является контроллером, отвечающим за управление девайсом. Терминология явно неадекватна. Ну это ладно. Какова цель создания этого контроллера? Нужно отделить девайс(например телевизор) от управления им? Если так, то почему он в классе телевизор все равно лепит средства управления им?
Добавлено через 24 минуты Shamil1, и вот еще что непонятно. Насколько я понял, основная цель автора в том, что у него разные девайсы управляются с одного пульта. Но для этой цели не нужно создавать отдельные контроллеры, для этого достаточно единого интерфейса для всех девайсов. В чем тогда смысл всего этого? Почему автор считает, что данный "паттерн" нужен для его случая?
0
|
|||||||
|
2 / 2 / 2
Регистрация: 23.10.2016
Сообщений: 139
|
|||||
| 22.02.2017, 00:36 [ТС] | |||||
|
Главная цель темы это понять: где и когда имеет смысл применять паттерн Команда. Не по теме: actionpattern, у Вас регистрация 21.02.2017 и ник прикольный=) Под эту тему учетку делали?))
0
|
|||||
|
Заблокирован
|
||
| 22.02.2017, 01:35 | ||
|
Tyson Fury, я когда про автора говорил, я имел в виду не Вас, а того, который по ссылке.
Добавлено через 1 минуту
0
|
||
|
2 / 2 / 2
Регистрация: 23.10.2016
Сообщений: 139
|
||
| 22.02.2017, 02:44 [ТС] | ||
|
К стати у того автора, пример почти списан с книги (Эрик Фримен, Элизабет Фримен - Паттерны проектирования (Head First O'Reilly) - 2011).
0
|
||
|
14343 / 9447 / 1359
Регистрация: 21.01.2016
Сообщений: 35,620
|
||
| 22.02.2017, 05:57 | ||
|
Лично я вижу этот паттерн и как набор параметров и как исполнитель в одном объекте (что мне кажется вполне разумным). Оттого могло пойти и недопонимание между нами.
0
|
||
|
Модератор
3138 / 2286 / 469
Регистрация: 26.03.2015
Сообщений: 8,890
|
||
| 22.02.2017, 10:29 | ||
|
Насколько уместно для заданной в статье задачи использование именно этого шаблона к текущему топику не относится. О применении шаблона в реальных задачах можно, например, почитать в википедии: Кликните здесь для просмотра всего текста
Применение
Шаблон Команда может быть полезен в следующих случаях. Кнопки пользовательского интерфейса и пункты меню В Swing и Borland Delphi Action (действие) является объектом команды. В дополнение к способности выполнить нужную команду, Action может иметь связанную с ним иконку, сочетание клавиш, текст всплывающей подсказки и так далее. Кнопка на панели инструментов или пункт меню могут быть полностью инициализированы с использованием только объекта Action. Запись макросов Если все действия пользователя представлены в виде объектов команды, программа может записать последовательность действий, просто сохраняя список командных объектов в том порядке, в котором они выполняются. Затем она может «воспроизвести» одни и те же действия, выполняя те же объекты команд в той же последовательности. Многоуровневая отмена операций (Undo) Если все действия пользователя в программе реализованы в виде командных объектов, программа может сохранить стек последних выполненных команд. Когда пользователь хочет отменить команду, программа просто выталкивает последний объект команды и выполняет его метод undo(). Сети Можно отправить объекты команд по сети для выполнения на другой машине, например действие игрока в компьютерной игре. Индикаторы выполнения Предположим, что программа имеет последовательность команд, которые она выполняет по порядку. Если каждый объект команды имеет метод getEstimatedDuration() (получить оценочную длительность), программа может легко оценить общую продолжительность процесса. Она может показать индикатор выполнения, который отражает, насколько близка программа к завершению всех задач. Пулы потоков Типичный класс пула потоков общего назначения может иметь метод addTask(), который добавляет рабочий элемент к внутренней очереди заданий ожидающих своего выполнения. Он поддерживает пул потоков, которые выполняют команды из очереди. Элементы в очереди являются объектами команд. Как правило, эти объекты реализуют общий интерфейс, такой как java.lang.Runnable, что позволяет пулу потоков запустить команды на выполнение, даже если он сам был написан без каких-либо знаний о конкретных задачах, для которых он будет использоваться. Транзакции Аналогично операции «отмена» система управления базами данных (СУБД) или установщик программного обеспечения может хранить список операций, которые были или будут выполнены. Если одна из них закончится неудачей, то все остальные могут быть отменены или быть отброшены (обычно называется откат). Например, если две связанные между собой таблицы базы данных должны быть обновлены, а второе обновление терпит неудачу, то транзакция может быть откачена, чтобы первая таблица не содержала недопустимую ссылку. Мастера Часто мастер (мастер установки или любой другой) представляет несколько страниц конфигурации для одного действия, которое происходит только тогда, когда пользователь нажимает на кнопку «Готово» на последней странице. В этих случаях, естественный способ отделить код пользовательского интерфейса от кода приложения является реализация мастера с помощью объекта команд. Объект команда создается при первом отображении мастера. Каждая страница мастера сохраняет свои изменения в объекте команды, поэтому объект заполняется по мере перехода пользователя. Кнопка «Готово» просто запускает метод execute() на выполнение. В класс Телевизор автор статьи ничего не лепит. В соответствии с шаблоном это некий уже существующий класс, созданный вне данного шаблона. Можете считать, что он скачал его гитхаба. Единый интерфейс для всех дивайсов у автора статьи есть - ICommand.
1
|
||
|
Заблокирован
|
||
| 22.02.2017, 18:23 | ||
|
А этовсе, что Ваши объяснения, что по ссылке, что в википедии -- это просто заклинания. Это все тему не раскрывает, по-моему.
0
|
||
|
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
|
|
| 24.02.2017, 11:35 | |
|
Вообще паттерн Команда очень полезен,
когда надо динамически формировать последовательность некоторых операций. Создаем контейнер команд, закидываем туда объекты-команды в нужном порядке - и вперед!
1
|
|
| 24.02.2017, 11:35 | |
|
Помогаю со студенческими работами здесь
51
Какова роль Invoker паттерна Команда?
Реализация паттерна MVC Реализация паттерна состояние Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Транскрипция 55-минутного видео через Whisper: WhisperDesktop облажался, спас Google Colab[
anaschu 01.06.2026
Понадобилось получить текст из свежезагруженного видео на YouTube. Казалось бы, задача на пять минут. Заняла полтора часа. Делюсь опытом — может кому пригодится последовательность решений.
. . .
|
21 мат мед. Планы на развитие модели здравоСохранения
anaschu 01.06.2026
AnyLogic: план развития симуляционной модели рабочего коллектива — динамический абсентеизм, реальные данные, три сценария сравнения
Продолжаю серию постов о дискретно-событийной модели рабочего. . .
|
20. Мат мед. Абсентеизм как отдельный тип простоя
anaschu 29.05.2026
Апдейт модели: исправленные баги, абсентеизм и новые механизмы
Продолжаю развивать ранее описанную модель рабочего коллектива на AnyLogic. За последние несколько дней был проведён серьёзный. . .
|
19. здоровье, усталость и психотип работника влияют на производительность предприятия, и наоборот, производительность на здоровье, усталось и психотип
anaschu 28.05.2026
Дискретно-событийная модель рабочего коллектива на AnyLogic: здоровье, выгорание, психотипы и микростимуляция
Привет, коллеги. Хочу поделиться итогами нескольких недель работы над симуляционной. . .
|
|
"Прокси" для последовательного порта
Eddy_Em 28.05.2026
Эту штуку написал я достаточно давно. Но сейчас вот понадобилось настроить датчик грозы, но при этом не отключать его от "метеодемона". Соответственно, надо запустить этот "прокси": метеодемон будет. . .
|
Рефакторинг программы уравнивания.
Massaraksh7 26.05.2026
Пример по предыдущей записи в блоге. Но, надо заметить, что, во-первых, там оптимизация не только математики, но и работы с базой данных, и с графами, а во-вторых, это ещё не всё.
|
Использование TThread в Lazarus для математических вычислений.
Massaraksh7 25.05.2026
Производя рефакторинг своих программ на предмет ускорения их работы, обратил внимание на такой аспект, как сокращение времени матвычислений. Дело в том, что приходится работать с большими матрицами. . .
|
Модель здравосохранения 18. Чем здоровее работник, тем быстрее выгорает
anaschu 24.05.2026
Имитационная модель корпоративного здравоохранения: что показывает математика
Сегодня в модели рабочего коллектива на AnyLogic появились три новые механики — выгорание через накопленную усталость,. . .
|