|
0 / 0 / 3
Регистрация: 03.07.2016
Сообщений: 22
|
|||||||||||||||||||||
Расширенная версия интерфейса для потомка класса09.08.2017, 13:44. Показов 1669. Ответов 10
Метки проектирование (Все метки)
Всех приветствую!
Возник вопрос при проектировании некой иерархии классов. К примеру, есть следующая небольшая иерархия классов контролёров для представлений:
В процессе выяснилось, что нужно предусмотреть расширенную версию контролёра для расширенной версии представления. Расширенное представление будет принимать ссылки на стандартные модели и контролёры с целью оперировать их данными (поиск, сортировка, делегирование команд простым контролёрам для выполнения базовых функций и так далее).
Стоить также отметить, что для производства контролёров используется фабрика, которая возвращает только указатель на интерфейс (IController*) в независимости от того, какой тип объекта потребовался клиенту. Сигнатура принимающего метода представления выглядит следующим образом:
0
|
|||||||||||||||||||||
| 09.08.2017, 13:44 | |
|
Ответы с готовыми решениями:
10
Вызов специфических для потомка функций, не зная класса потомка
Вызов метода базового класса из класса-потомка |
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||||||
| 09.08.2017, 14:44 | |||||||
|
и этот "расширенный" поток ожидает, что от фабрики к нему придет его "расширенный" интерфейс. просто дайте ему то, что он хочет.
0
|
|||||||
|
2393 / 1921 / 763
Регистрация: 27.07.2012
Сообщений: 5,562
|
||||||||
| 09.08.2017, 15:04 | ||||||||
Сообщение было отмечено Usagi как решение
РешениеДобавлено через 8 минут Как пример:
1
|
||||||||
|
0 / 0 / 3
Регистрация: 03.07.2016
Сообщений: 22
|
||||||||
| 10.08.2017, 14:13 [ТС] | ||||||||
0
|
||||||||
|
2393 / 1921 / 763
Регистрация: 27.07.2012
Сообщений: 5,562
|
||
| 10.08.2017, 14:41 | ||
|
0
|
||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||
| 10.08.2017, 14:51 | |||
Сообщение было отмечено Usagi как решение
Решениено использовать его как одного из наследников. вам не кажется, что из самой постановки задачи прямо проистекает, что придется делать каст, так или иначе? и здесь вы можете: 1. использовать static_cast, который выполняет преобразование в статике. то бишь времени компиляции. то бишь без издержек в рантайме. то бишь бесплатно с точки зрения производительности и экономичности. одна простенькая строчка решает все ваши проблемы, без каких либо пенальти. 2. использовать dynamic_cast который в общем то и не нужен. кроме защиты от ошибки-которой в принципе быть не может". 3. нагородить кучу дополнительных классов, задействовать кучу всяких паттернов. по сути - тот же каст, только через с сопутствующей кучкой виртуальных функций. его в простонародье ещё называют "ооп-головного мозга". болезнь характеризуется неоправданным увеличением количества классов.
1
|
|||
|
0 / 0 / 3
Регистрация: 03.07.2016
Сообщений: 22
|
||
| 10.08.2017, 15:19 [ТС] | ||
|
Да, я читал что данный паттерн не стоит применять, если имеет место частые добавления классов в иерархию. Впрочем, структура контроллеров должна быть достаточно стабильна после окончания процесса проектирования.
Может быть, есть ещё методы решения поставленной задачи? На данный момент для меня подходит использовать посетителя. P.S. думал над первым паттерном, который Вы написали - наблюдатель. Так и не понял, как его можно применить в данном случае. Добавлено через 17 минут
0
|
||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||
| 10.08.2017, 17:09 | |||
|
с высокой степенью вероятности окажется, что они имели ввиду именно dynamic_cast статический каст используется повсеместно. это - нормальная практика.
0
|
|||
|
Каждому свое
533 / 219 / 81
Регистрация: 05.08.2013
Сообщений: 1,614
|
||||||
| 10.08.2017, 18:12 | ||||||
|
Контроллеры находятся в фабрике? Можно попробовать распределить контроллеры по типу. И получать их через перегруженные методы. Выйдет что-то типа такого:
Кстати, чтобы их распределить по векторам, приведения также не понадобятся
0
|
||||||
|
0 / 0 / 3
Регистрация: 03.07.2016
Сообщений: 22
|
|||
| 11.08.2017, 15:34 [ТС] | |||
0
|
|||
|
Каждому свое
533 / 219 / 81
Регистрация: 05.08.2013
Сообщений: 1,614
|
|||||||
| 11.08.2017, 17:10 | |||||||
|
Usagi,
К примеру, если вы в фабрике создаете и автоматически добавляете в эту фабрику контроллер типа T, и у типа T есть конструктор с неизвестным числом и типами параметров, то это будет выглядеть примерно так:
0
|
|||||||
| 11.08.2017, 17:10 | |
|
Помогаю со студенческими работами здесь
11
Не получается вызвать метод класса потомка через ссылку Шаблон родительского класса и шаблон класса потомка Угадай число, расширенная версия Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера 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. Пошагово создадим проект для загрузки изображения. . .
|