|
2 / 2 / 2
Регистрация: 23.10.2016
Сообщений: 139
|
|
Использование и реализация паттерна "Команда"19.02.2017, 23:46. Показов 5274. Ответов 50
Метки нет (Все метки)
Вот схема паттерна (скриншот).
Прицепи, все довольно просто: есть инициатор (Invoker), который хочет, что бы получатель (Receiver) что либо выполнил, а само выполнение инкапсулируется классом КонкретнаяКоманда. 1. А что если инициатор и получатель это один и тот же объект? Для таких действий шаблон Команда подходит? Например: Пользователь ввел в 9 цифр и далее нажал на кнопку Shuffle. После чего эти цифры должны перемешаться. То есть, происходит действие над данными внутри одного класса. Либо еще пример: Пользователь ввел в 9 цифр и программа должна проверить их на корректность. 2. И вообще, насколько часто Вы используете паттерн Команда в своих приложениях (там где есть GUI). Вообщем помогите разобраться, а то я запутался.
0
|
|
| 19.02.2017, 23:46 | |
|
Ответы с готовыми решениями:
50
Реализация паттерна "Команда" Реализация паттерна Observer от Microsoft Реализация консольного меню с использованием паттерна "Команда" |
| 20.02.2017, 14:05 | |
|
0
|
|
| 20.02.2017, 14:09 | |
|
0
|
|
| 20.02.2017, 14:33 | |
|
Не по теме: Usaga, дело в том, что "паттерны" не являются универсальными, а зависят от возможностей языка. То что они позиционируются как универсальные средства проектирования -- это не очень хорошо, это ложь. Многие паттерны -- это просто костыли, которые нужны для преодоления ограничений выразительных возможностей конкретных языков.
0
|
|
|
2 / 2 / 2
Регистрация: 23.10.2016
Сообщений: 139
|
||||||
| 20.02.2017, 14:45 [ТС] | ||||||
|
0
|
||||||
|
14347 / 9450 / 1360
Регистрация: 21.01.2016
Сообщений: 35,630
|
||||
| 20.02.2017, 14:51 | ||||
|
0
|
||||
|
2 / 2 / 2
Регистрация: 23.10.2016
Сообщений: 139
|
|
| 20.02.2017, 14:56 [ТС] | |
|
0
|
|
|
14347 / 9450 / 1360
Регистрация: 21.01.2016
Сообщений: 35,630
|
||
| 20.02.2017, 15:01 | ||
|
Добавлено через 58 секунд Если твоей команде не нужны никакие ссылки для работы, то придумывать какие-то receiver-ы не нужно. Просто класс с методом (скажем Do()), который может кто-то когда-нибудь вызвать.
1
|
||
|
2 / 2 / 2
Регистрация: 23.10.2016
Сообщений: 139
|
|
| 20.02.2017, 15:07 [ТС] | |
|
0
|
|
|
14347 / 9450 / 1360
Регистрация: 21.01.2016
Сообщений: 35,630
|
|
| 20.02.2017, 15:09 | |
|
Tyson Fury, полагаю, что тут изображено то, что у нас на работе называется RelayCommand. В данном случае объект команды просто делегирует свою работу другому коду. Это не обязательно делать.
0
|
|
|
Модератор
3138 / 2286 / 469
Регистрация: 26.03.2015
Сообщений: 8,894
|
||||||||||||
| 20.02.2017, 16:45 | ||||||||||||
|
Вместо:
1
|
||||||||||||
|
Заблокирован
|
||||||
| 21.02.2017, 15:55 | ||||||
|
Добавлено через 5 минут Добавлено через 7 минут Добавлено через 7 минут
0
|
||||||
|
Модератор
3138 / 2286 / 469
Регистрация: 26.03.2015
Сообщений: 8,894
|
||
| 21.02.2017, 16:55 | ||
|
Во втором примере кода Main() знает, как надо включать телевизор (как правильно составить лямбду). Более того, если мне нужно будет ещё где-нибудь настроить эту команду (для другого пульта), мне придётся этот код (который составляет лямбду) продублировать. Кроме того, сюда сложно нормально вклеить отмену операции, если она требуется. Пару лямбд передавать? Или - ещё хуже - две независимые лямбды передавать?
0
|
||
|
14347 / 9450 / 1360
Регистрация: 21.01.2016
Сообщений: 35,630
|
||
| 21.02.2017, 17:03 | ||
|
0
|
||
|
Заблокирован
|
|||||
| 21.02.2017, 17:17 | |||||
|
Добавлено через 4 минуты Usaga, покажите какой-нибудь пример, я не понимаю, о чем вы говорите. Команда -- это отсылка сообщения обработчику, не вижу разницы, как эта отсылка реализована, и что она должна "инкапсулировать" Добавлено через 3 минуты
0
|
|||||
|
Модератор
3138 / 2286 / 469
Регистрация: 26.03.2015
Сообщений: 8,894
|
||
| 21.02.2017, 17:27 | ||
|
Чтобы включить телевизор в общем случае нужно знать, какой телевизор включать. И включение прибора обычно не сводится к нажатию кнопки "вкл". Например, может потребоваться залить воду, засыпать кофе, вставить шнур в розетку и так далее.
0
|
||
|
Заблокирован
|
|||
| 21.02.2017, 17:32 | |||
|
Добавлено через 40 секунд
0
|
|||
|
Модератор
3138 / 2286 / 469
Регистрация: 26.03.2015
Сообщений: 8,894
|
||
| 21.02.2017, 17:38 | ||
|
Здесь обсуждается шаблон Команда, а Ваша критика относится не к нему, а к тому, что Вы сами придумали (к Вашему неправильному понимаю этого шаблона).
0
|
||
|
Заблокирован
|
||
| 21.02.2017, 17:51 | ||
|
Добавлено через 4 минуты Shamil1, по сути дела, все ООП можно рассматривать в том же самом ключе, все объекты сконфигурированы на прием сообщений, которые можно назвать командами, только объект не обязан исполнять эту команду, он сам решает, что ему делать, и как на нее реагировать. А любая команда реализована некоторым обработчиком.
0
|
||
|
Модератор
3138 / 2286 / 469
Регистрация: 26.03.2015
Сообщений: 8,894
|
||
| 21.02.2017, 18:37 | ||
|
Если Вы хотите обсудить шаблон "Команда", то Вам обязательно нужно знать, что (по мнению автора шаблона) означает "команда" в данном контексте. Если Вы хотите обсудить, насколько удачное название придумал автор для своего шаблона, то создайте тему в разделе "обо всём". Если Вы хотите объяснить автору шаблона, что он имел ввиду под словом "команда", то Вам следует обратиться непосредственно к автору шаблона.
0
|
||
|
Заблокирован
|
|||
| 21.02.2017, 19:02 | |||
|
Во-вторых, автор того утверждения так и не ответил, зачем там нужно состояние, если все что там делается -- отсылается сообщение.. Под состоянием понимается изменяемое состояние надо полагать? Зачем оно там нужно? Зачем оно нужно, в Вашем примере, и вообще? Добавлено через 15 минут
0
|
|||
| 21.02.2017, 19:02 | |
|
Какова роль Invoker паттерна Команда?
Реализация паттерна MVC Реализация паттерна состояние Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Программа для com-порта
Uhbif79 05.06.2026
Всем привет, давно хотел изучить Qt, начинал, бросал, потом снова начинал. И сейчас вот смог написать свою первую программу.
До этого имел опыт программирования микроконтроллеров, писал прошивки на. . .
|
Транскрипция 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
Производя рефакторинг своих программ на предмет ускорения их работы, обратил внимание на такой аспект, как сокращение времени матвычислений. Дело в том, что приходится работать с большими матрицами. . .
|