2013-03-27 2 views
0

Я хочу создать класс R, который будет наблюдать все экземпляры класса S, то есть я использую наблюдаемый наблюдаемый шаблон. Нет необходимости иметь несколько экземпляров класса R, я в этом уверен. Вот почему я сделал все элементы R статическими. Но я не уверен, что это правильный способ разработки класса. Метод public void addObserver(Observer o)Observable нуждается в объекте, а не в статическом классе. Это нормально, если я создаю экземпляр R только для того, чтобы передать его addObserver? Нарушает ли это шаблон Observable-Observer?Все статические члены в классе, который реализует java.util.Observer?

ответ

1

Даже если вам не нужны несколько экземпляров R (прямо сейчас), вам необязательно нужно и не обязательно проектировать R, состоящий только из static пользователей. Дизайн программы может диктовать использование только одного экземпляра R. Некоторые даже предложили бы использовать шаблон Singleton для обеспечения его программного применения.

Метод общественных недействительный addObserver (наблюдатель о) наблюдаемом нуждается в объекте, а не статического классе

Фраза static class обычно ссылается на внутренний-классе, который определяется как статическим, чтобы указать, что он может существовать без вмещающего экземпляра внешнего класса. Я думаю, вы неправильно используете эту фразу.

Можно ли создать экземпляр R только для того, чтобы передать его в addObserver?

Да, конечно. Просто потому, что вы объявили R таким образом, чтобы все члены были static и, следовательно, принадлежали классу (загружаемому ClassLoader), не означает, что вы не можете создавать и использовать столько экземпляров класса, сколько хотите ,

Нарушает ли это шаблон Observable-Observer?

Пока R implements Observer, no. Фактически, для одного и того же наблюдателя ненормально наблюдать несколько наблюдаемых.

+0

Да, я мог бы использовать шаблон singleton для R. Но мне было интересно, есть ли какие-либо проблемы при создании R all static и создании объекта R и добавлении его в качестве наблюдателя ко всем S-объектам. Есть ли проблема в этом? –

+0

Отредактировано для решения некоторых более конкретных вопросов. –

0

Nope не нарушает. Кто знает, может быть, в будущем у вас могут быть другие наблюдатели. У вас все еще есть статические поля, которые обновляются не статическими методами. Итак, состояние статических полей разделяется всеми экземплярами. (Шаблон состояния моно)

0

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

+0

Почему статические члены зла? –

+1

Для статических переменных см. 'Http: // gbracha.blogspot.ru/2008/02/cut-out-static.html'. Чистые статические методы (без доступа к статическим переменным) могут переноситься в локальной среде, но менее практичны в более широкой среде, поскольку доступ к ним через интерфейсы невозможен, и поэтому они менее гибкие. –

+0

К сожалению, он только описывает проблему.Он не дает примеры кода, чтобы показать, как возникают проблемы. ПРИМЕР - Не говоря уже о сложностях, которые порождает статическая инициализация: он может затормозить, приложения могут видеть неинициализированное состояние, и если у вас нет действительно умного времени выполнения, вам сложно скомпилировать его эффективно (потому что вам нужно проверить, если вещи инициализируются на каждом использования). –

Смежные вопросы