Я пытаюсь обойти уродливое условное приведение, используемое при интерпретации вызова update () для наблюдаемой, которая захочет уведомить своих наблюдателей о множественных типах событий. Кроме того, я бы предпочел не передавать флаги методу notifyObservers () / update ().
Я не хочу, чтобы наблюдатели опрашивали наблюдаемый объект, чтобы выяснить, что изменилось, я бы хотел, чтобы эти новые данные передавались наблюдателям через метод update () (или аналогичный.)
У меня есть идея для решения. Я создаю один наблюдаемый объект для каждого типа уведомлений. Например: Observable - это объект, представляющий аппаратное устройство, он будет содержать observables, представляющий его состояние:
public final Observable connectionState = new Observable();
public final Observable dataState = new Observable ();
Таким образом, наблюдателям не нужно выполнять какие-либо запросы или условное приведение, так как один тип наблюдателя, то есть один переопределенный метод update (), может использоваться для каждого типа уведомления.
После большого разочарования это самое элегантное решение, которое я могу себе представить, однако у меня возникло ужасное ощущение, что я упустил момент о том, как правильно использовать Наблюдатели / Наблюдаемые.
Мои основные проблемы с этим решением:
- Это все еще включает в себя приведение (по крайней мере, это не условно)
- Поскольку наблюдаемые должны быть наблюдаемыми, они должны быть публичными членами. Хотя это позволяет наблюдателям вызывать addObservable (), оно также позволяет им вызывать notifyObservers ().
Я правильно поступаю?
Спасибо