Я хочу создать класс R
, который будет наблюдать все экземпляры класса S
, то есть я использую наблюдаемый наблюдаемый шаблон. Нет необходимости иметь несколько экземпляров класса R
, я в этом уверен. Вот почему я сделал все элементы R
статическими. Но я не уверен, что это правильный способ разработки класса. Метод public void addObserver(Observer o)
Observable
нуждается в объекте, а не в статическом классе. Это нормально, если я создаю экземпляр R
только для того, чтобы передать его addObserver
? Нарушает ли это шаблон Observable-Observer?Все статические члены в классе, который реализует java.util.Observer?
ответ
Даже если вам не нужны несколько экземпляров R
(прямо сейчас), вам необязательно нужно и не обязательно проектировать R
, состоящий только из static
пользователей. Дизайн программы может диктовать использование только одного экземпляра R
. Некоторые даже предложили бы использовать шаблон Singleton для обеспечения его программного применения.
Метод общественных недействительный addObserver (наблюдатель о) наблюдаемом нуждается в объекте, а не статического классе
Фраза static class
обычно ссылается на внутренний-классе, который определяется как статическим, чтобы указать, что он может существовать без вмещающего экземпляра внешнего класса. Я думаю, вы неправильно используете эту фразу.
Можно ли создать экземпляр R только для того, чтобы передать его в addObserver?
Да, конечно. Просто потому, что вы объявили R
таким образом, чтобы все члены были static
и, следовательно, принадлежали классу (загружаемому ClassLoader), не означает, что вы не можете создавать и использовать столько экземпляров класса, сколько хотите ,
Нарушает ли это шаблон Observable-Observer?
Пока R implements Observer
, no. Фактически, для одного и того же наблюдателя ненормально наблюдать несколько наблюдаемых.
Nope не нарушает. Кто знает, может быть, в будущем у вас могут быть другие наблюдатели. У вас все еще есть статические поля, которые обновляются не статическими методами. Итак, состояние статических полей разделяется всеми экземплярами. (Шаблон состояния моно)
Как правило, избегайте использования статических методов и полей. То есть, если вы можете жить только с членами экземпляра, сделайте это. Статические члены являются злыми, иногда необходимыми, но никогда не желаемыми.
Почему статические члены зла? –
Для статических переменных см. 'Http: // gbracha.blogspot.ru/2008/02/cut-out-static.html'. Чистые статические методы (без доступа к статическим переменным) могут переноситься в локальной среде, но менее практичны в более широкой среде, поскольку доступ к ним через интерфейсы невозможен, и поэтому они менее гибкие. –
К сожалению, он только описывает проблему.Он не дает примеры кода, чтобы показать, как возникают проблемы. ПРИМЕР - Не говоря уже о сложностях, которые порождает статическая инициализация: он может затормозить, приложения могут видеть неинициализированное состояние, и если у вас нет действительно умного времени выполнения, вам сложно скомпилировать его эффективно (потому что вам нужно проверить, если вещи инициализируются на каждом использования). –
- 1. Статические члены в глобальном классе
- 2. Java только статические члены в основном классе
- 3. Переопределить статические члены в производном классе. Java
- 4. Выводя статические члены
- 5. получает все статические члены пространства имен
- 6. Статические члены в VB.NET
- 7. расширение класса, члены которого все статические
- 8. статические члены Повсеместно статические методы
- 9. System.WIndows.Application статические члены потокобезопасны?
- 10. статические члены Си ++
- 11. Получить все статические добытчиками в классе
- 12. Статические члены python
- 13. Статические члены класса в C++
- 14. Дизайнер не реализует члены интерфейса
- 15. Статические члены вводят объекты?
- 16. Защищенные статические переменные-члены
- 17. Статические члены класса экземпляра
- 18. Объяснение Статические члены
- 19. статические члены и consts
- 20. Отслеживание вызовов статических методов в классе с использованием java.util.Observer
- 21. Non статические члены в C++
- 22. Статические функции-члены в C++
- 23. статические и постоянные члены, статические классы и узкие места
- 24. Члены группы в классе
- 25. OpenGL/++ Магазин C все текстурные активы в отдельном классе как статические члены
- 26. singleton - статические члены, непризнанные в файле cpp
- 27. Powermock - насмехаясь статические члены класса
- 28. Статические поля в классе
- 29. Почему можно инициализировать не константные и статические константы-члены-члены, но не статические переменные-члены?
- 30. C++ Статические Struct Тип члены
Да, я мог бы использовать шаблон singleton для R. Но мне было интересно, есть ли какие-либо проблемы при создании R all static и создании объекта R и добавлении его в качестве наблюдателя ко всем S-объектам. Есть ли проблема в этом? –
Отредактировано для решения некоторых более конкретных вопросов. –