Можно ли наблюдать за классом и наблюдателем? - PullRequest
4 голосов
/ 20 августа 2009

Имел момент запаха кода и не мог решить, нормально ли для класса быть Наблюдаемым и Наблюдателем, поэтому подумал, что я опубликую здесь.

class ObservableAndObserver extends Observable implements Observer {

 // Class is ofcourse registering and receving notifcations on different events
 // effectly actving as a middle man. 

 // Is this a pattern in itself?  'middleman-pattern' ??

}

Мысли? Взлом SRP?

Ответы [ 8 ]

3 голосов
/ 20 августа 2009

Технически это нормально, но вы должны убедиться, что вы не просто повторно передаете полученные уведомления. Если этот класс наблюдает за class1, а затем за ним наблюдает class2, попробуйте, чтобы этот класс наблюдал за class1.

1 голос
/ 23 августа 2009

Все нормально :-). Если класс подписывается на другое событие класса и может вызывать свои собственные события, это нормально. Конечно, вы можете сделать это неправильно, но концепция класса, чтобы искать какой-то другой класс и быть наблюдаемым, в порядке.

1 голос
/ 20 августа 2009

Я не вижу причин, почему бы и нет. Бетон пример был бы полезен, хотя. Еще лучше будет реальный код, который вы уже реализовали, который мы могли бы критиковать.

0 голосов
/ 30 мая 2013

Возможно, вы используете другой вариант шаблона Publisher-Subscriber, называемый Канал событий , на который явно ссылается книга POSA:

"В этом варианте канал событий создается и размещается между издателем и его подписчиками. Для издателей канал событий отображается как подписчик, а для подписчиков - как издатель". (стр. 341)

0 голосов
/ 22 ноября 2009

это зло. b наблюдает за и уведомляет c.

так что есть фрагмент кода, который говорит a.setValue (...) и что-то в с происходит.

Теперь подумайте: этот фрагмент кода должен был сказать: a.setValue (...); c.doSomething (...);

конечно, этот кусок кода теперь должен знать о a и c, но по крайней мере нет волшебства все под солнцем. информация, скрывающаяся в oo, предназначена для кода в setValue (...) нет в наблюдателе / ​​наблюдаемая картина, умноженная на 2.

Ура, L.

0 голосов
/ 20 августа 2009

Это один из способов, которыми многие системы, основанные на событиях, реализуют фильтры. Другой, в Java, имеет внутренний класс для одной из ролей, но это более распространено, если фильтр имеет несколько наблюдателей с разными ролями. Поэтому, если вы думаете, что у него могут быть разные роли, вы можете захотеть, чтобы у него был аксессор для той роли, которую вы сейчас себе представляете getObserver() { return this; }, но это, вероятно, YAGNI и может быть добавлено позже.

0 голосов
/ 20 августа 2009

пока объект наблюдает за событиями других объектов и его наблюдают другие объекты, это нормально. Но если объект наблюдает сам, вероятно, есть что-то действительно странное .

Может быть, какой-то код поможет понять, использовался ли шаблон проектирования странным образом.

0 голосов
/ 20 августа 2009

Хотя я согласен с Нилом, я мог видеть, что это запах кода, потому что класс может делать слишком много.

...