Сценарий: скажем, у меня есть базовый класс SketchbookEventObserver
и производные классы MouseClickObserver
, TouchObserver
и TextChangedObserver
.
Все эти SketchbookEventObserver
s должны сделать сетевой запрос с данными о произошедшем событии:
MouseClickObserver
- координаты щелчка мышью.
TouchObserver
- координаты и длительность касания.
TextChangedObserver
- старое и новый текст с идентификатором текстового поля.
Все эти наблюдатели зарегистрированы в классе UIEventRegistry
. Когда происходит событие, оно будет вызывать OnEvent
для каждого наблюдателя и передавать в виде параметров:
- Тип события - щелчок мышью / касание / текст изменен. Это представляется идентификатором.
- Данные о событии - как описано выше. Каждый тип события будет иметь разные типы данных .
Однако я не могу переопределить OnEvent
с различными входными параметрами в каждом из производных классов. Если у меня есть входной параметр generi c и polymorphi c, скажем, EventData
с функцией GetData()
, мне все равно придется переопределить GetData()
в производных классах EventData
, которые будут иметь разные возвращаемые значения , Это также невозможно.
Другой вариант - не иметь наследства между этими наблюдателями и рассматривать их как отдельные объекты. EventRegistry
будет иметь массив / список наблюдателей каждого типа, где их типы известны, затем вызвать mMouseClickObservers[i].OnEvent()
для события щелчка мыши, mTouchObservers[i].OnEvent()
для события касания и т. Д.
Но это означает, что EventRegistry
потребуется знание о конкретных классах, которые должны быть опубликованы, если EventRegistry
является частью другой библиотеки / пакета.
Есть ли лучший способ создать это