Форум программистов, компьютерный форум, киберфорум
ООП и паттерны
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.65/23: Рейтинг темы: голосов - 23, средняя оценка - 4.65
0 / 0 / 0
Регистрация: 18.09.2017
Сообщений: 22

Какой паттерн использовать?

26.09.2017, 12:11. Показов 4972. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Какой паттерн использовать (и использовать ли) в такой ситуации:
Существует множество разноклассовых объектов на тачскрин-экране, могущих отреагировать на касание. Должен отреагировать один, ближайший.

Я использовал такую схему: Один объект-посредник реагирует на касание, и отсылает сообщение с координатами всем подписчикам (разноклассовым объектам, подписавшимся на него).
Подписчики отвечают ему своей дистанцией до точки касания, он выбирает минимальную и повторно шлет сообщение (другого типа) подписчикам. Тот, чья дистанция совпадает - реагирует на касание.
Реализовано на event-ах c#.
Можно ли это сделать более изящно?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.09.2017, 12:11
Ответы с готовыми решениями:

Какой паттерн использовать в такой ситуации?
Клиент переводит деньги на счет в банк, ему выдают кредитную карточку, по которой он может получить доступ к счету.

Какой структурный паттерн выбрать?
Задача поставлена следующим образом - "С помощью шаблона проектирования обеспечить вывод на экран собственных инициалов, состоящих из...

На какой паттерн заменить switch?
Ситуация следующая: есть перечисление (5 элементов Type1 = 6, Type2 = 12....). Их интовое значение в итоге повлияет на размерность матрицы....

11
Эксперт .NET
 Аватар для Usaga
14145 / 9374 / 1350
Регистрация: 21.01.2016
Сообщений: 35,293
28.09.2017, 07:02
Лучший ответ Сообщение было отмечено mmk0102 как решение

Решение

mmk0102, какой кошмар. А нельзя ли пройтись по всей коллекции объектов, которые могут быть выбраны, и проверить их координаты на совпадение с выбранной точкой? Вот так просто, в лоб, без мути всякой с событиями.

Если объектов совсем много, то их дополнительно можно упорядочить в какой-нибудь отдельной структуре типа QuadTree или аналогичной.
0
0 / 0 / 0
Регистрация: 18.09.2017
Сообщений: 22
29.09.2017, 00:49  [ТС]
Объекты не в коллекции. И ничего не знают друг о друге: слабая связанность. Могут динамически создаваться и исчезать. Тут бы по идее подошел Observer, но он отсылает сообщения и что с ними сделают получатели - его не интересует.
Поэтому мне он не совсем подходит.
0
Эксперт PHP
 Аватар для Fedor Vlasenko
936 / 693 / 236
Регистрация: 01.02.2015
Сообщений: 1,848
29.09.2017, 01:00
Я бы записывал в данном случае координаты объекта в удобной структуре(при создании и движении). При всплытии события находил ближайший элемент по координатам и отправлял ему событие.
0
Эксперт .NET
 Аватар для Usaga
14145 / 9374 / 1350
Регистрация: 21.01.2016
Сообщений: 35,293
29.09.2017, 03:50
mmk0102, так держите эти объекты в коллекции. При этом они ничего друг о друге знать всё равно не будут. О ни должен знать тот, кто будет проходиться по коллекции и искать нужный (по координатам или иными критериям). Механизм событий тут совершенно по не уместен.
1
0 / 0 / 0
Регистрация: 18.09.2017
Сообщений: 22
29.09.2017, 13:55  [ТС]
Пожалуй идея с коллекцией интересна. Буду ее пробовать.
Получается, события были бы уместны если не было обратной связи между издателем и подписчиками?
0
Эксперт .NET
 Аватар для Usaga
14145 / 9374 / 1350
Регистрация: 21.01.2016
Сообщений: 35,293
29.09.2017, 14:13
mmk0102, события уместны там, где нужны СОБЫТИЯ о том, что что-то где-то изменилось, и где неизвестно кто и как на это отреагирует.

У вас же весь круг "ответственных лиц" известен: есть контроллер, который принимает ввод от пользователя и точно знает как на него реагировать.

Добавлено через 2 минуты
К тому же, такой подход с событиями выворачивает архитектуру приложения (если она есть): объекты, по мимо своих основных задач, должны ещё и знать про какое-то касание экрана и уметь рассчитывать какие-то расстояния.

Тоже самое, как если бы санитары сами себе шприцы отливали и палаты строили.
0
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
29.09.2017, 17:12
Цитата Сообщение от mmk0102 Посмотреть сообщение
Объекты не в коллекции.
гуй, который держит элементы для отрисовки не в коллекциях, это что-то новое в области гуестроения.
0
0 / 0 / 0
Регистрация: 18.09.2017
Сообщений: 22
30.09.2017, 12:08  [ТС]
Ну, возможно они в коллекции на уровне игрового движка (Unity). Я же создаю красный круг (или черный квадрат), навешиваю на него скрипт, который меняет цвет (например), и больше никаких коллекций для меня не существует.
Но, как правильно сказали выше, можно создать такую коллекцию самому в объекте-контроллере, и в ней осуществлять поиск кандидата с нужными параметрами.
0
Эксперт .NET
 Аватар для Usaga
14145 / 9374 / 1350
Регистрация: 21.01.2016
Сообщений: 35,293
30.09.2017, 13:01
mmk0102, если используется какой-то движок, то имеет смысл "покурить" его документацию. Такой функционал как поиск объекта по координатам должен быть реализован абсолютно в любом игровом движке.
0
0 / 0 / 0
Регистрация: 18.09.2017
Сообщений: 22
30.09.2017, 15:46  [ТС]
В Unity есть поиск по имени и тегу. По координатам сведется к тому что я делаю: цикл с перебором. Я в целом понял идею с коллекцией, буду ее использовать. Всем спасибо.
0
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
30.09.2017, 16:21
Цитата Сообщение от mmk0102 Посмотреть сообщение
создаю красный круг (или черный квадрат), навешиваю на него скрипт, который меняет цвет (например),
а как он попадает в, то, что его отрисовывает? как юнити знает что круг надо отрисовать?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.09.2017, 16:21
Помогаю со студенческими работами здесь

Какой поведенческий паттерн выбрать?
Пишу на c#(Но это впринципе не важно) Есть задача: реализовать арифметические и логические операции с комплексными числами. Надо...

Какой паттерн лучше применить?
Добрый день например в WPF приложении есть 3 Views. Каждая View содержит Control разного типа, пусть это будут кнопки(круглая, квадратная и...

Посоветуйте, какой паттерн можно применить?
Ситуация следующая. Есть класс с набором методов, от него наследуется 3 класса, у каждого класса добавляются дополнительные поля и...

Какой паттерн/паттерны юзать для реализации задачи?
Есть задача: «Заводы по производству автомобилей» где должно быть реализовано создание автомобилей разных типов на разных заводах. Какие...

Какой паттерн использовать в данном случае?
Есть у меня паттерн абстрактная фабрика. Но в этой абстрактной фабрике мне потребовалось сделать бизнес логику. Какой паттерн использовать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru