Java Reimplement Observer - PullRequest
       17

Java Reimplement Observer

1 голос
/ 22 февраля 2012

Почему многим людям не нравится шаблон JDK Observer и предлагается реализовать свой собственный? Зачем заново изобретать колесо?

Повторно внедренный наблюдатель, которого я вижу, является тем же наблюдателем JDK.

Ответы [ 2 ]

4 голосов
/ 22 февраля 2012

Одной из возможных причин является то, что Observable - это конкретный класс, который вы должны подклассировать.Java имеет только одно наследование, поэтому, если у вас уже есть суперкласс, вы также не можете подкласс Observable.

Вторая причина заключается в том, что вы часто хотите добавить к объекту несколько типов наблюдателя (слушателя).и Observer не поддерживает это напрямую (вы можете запускать разные объекты в методе notifyObservers, но это не так очевидно, как наличие нескольких интерфейсов слушателей, и имеет большой потенциал для ошибок и неэффективности, поскольку наблюдатели будут получать объектыне предназначен для них).

1 голос
/ 22 февраля 2012

java.util.Observable - это класс.не интерфейс Как таковой, он обеспечивает некоторую функциональность без необходимости кодировать его самостоятельно, но это означает, что ваш собственный класс, который расширяет его, не может расширять какой-либо другой класс.Это ограничение.

Другие шаблоны имеют Observable в качестве интерфейса и не имеют этой проблемы (но имеют стоимость того, что вам придется реализовывать еще немного кода самостоятельно)

...