Я просто немного смущен различием между шаблоном наблюдателя и состояния. Мне дали проект, в котором клиент является самолетом на рейсе, который вычисляет данные для разных датчиков, таких как GPS, скорость, уровень топлива, а затем данные отправляются в сеть, а затем на сервер. На данный момент я использовал шаблон наблюдателя для моей диаграммы классов. Диаграмму классов можно просмотреть из нижеследующего, пожалуйста, дайте мне знать, если мое решение правильное и если выбранный шаблон дизайна подходит для этого решения. Состояние или шаблон наблюдателя в объекте C++
ответ
Создайте автомат состояния событий для определения системы (скажем, для ошибки, блокировки или некоторых других условий проверки и т. Д.). Здесь можно использовать шаблон состояния. Шаблон наблюдателя используется, когда между объектами существует один-много отношений между объектами, например, если один объект изменен, его зависимые объекты должны быть уведомлены автоматически. Мы используем шаблон проектирования наблюдателя, когда наблюдаемый не знает ни одного наблюдателя и должен иметь возможность уведомлять другие объекты, не зная объектов.
Вы сказали: * «Шаблон наблюдателя используется, когда между объектами существует одно-много отношений» *. Не правда. Вы можете использовать шаблон Observer, даже если у вас есть одно наблюдение, которое наблюдается одним наблюдаемым. Кроме того, вы отмечаете, что шаблон состояния является лучшим выбором, не объясняя, как пример в исходном вопросе лучше реализуется через шаблон состояния. Какие компоненты данного примера могут быть включены в государственный образец и как? Как бы то ни было, вы, похоже, определили шаблоны, но не использовали их в текущем контексте. – CKing
Я просто немного запутались с разницей между наблюдателем и государственного образцом
наблюдателем шаблоном в основном используются, когда у вас есть объект или набор объектов (известный как наблюдатели), которые хотят быть проинформированы/обновлены о любых изменениях состояния одного или нескольких объектов (известных как наблюдаемые или субъекты). В вашем примере Network
является Observer, который хочет знать об изменениях в данных самолета. С другой стороны, объекты данных аэроплана, такие как Speed
, GPS
и т. Д., Являются Наблюдаемые или Объекты, что Network
хочет сохранить дорожку для изменений. (Кажется, что ваша терминология отменена). Всякий раз, когда данные самолета, такие как его Speed
, меняются, Network
должен быть уведомлен об этом изменении соответствующим объектом Speed .
Состояние Образец с другой стороны в основном используется, когда ваш прецедент можно представить в виде конечного автомата. В вашем примере весь взлет, летающий и посадочный процесс самолета можно представить на конечной машине с логическими состояниями, такими как приземление, взлет, полет, посадка и т. Д.
Теперь должно быть ясно что Observer и Состояние У шаблона есть действующее приложение в вашем случае с образцом Observer, который соответствует основному заявлению о проблеме, которое вы описали в своем вопросе. Тем не менее, нет необходимости иметь отдельно Наблюдаемые объекты, такие как скорость, GPS, et.c. Вы можете иметь один Наблюдаемые объект под названием FlighData
, который имеет атрибуты, такие как скорость, GPS, engineFuelLevel, engineTemp и т.д.
Я также рекомендовал бы вам получить лучшее понимание наблюдателя картины, прежде чем применять его в ваше приложение.Вот некоторые ссылки, чтобы начать работу:
- 1. Шаблон наблюдателя - состояние гонки
- 2. Шаблон наблюдателя в C#
- 3. Шаблон наблюдателя в C++
- 4. Шаблон проектирования наблюдателя в C++
- 5. Шаблон наблюдателя или какой-либо другой шаблон
- 6. Шаблон наблюдателя C и Java
- 7. Модифицированный шаблон дизайна наблюдателя C++
- 8. Шаблон наблюдателя в wxPython
- 9. Как реализовать шаблон наблюдателя в C++
- 10. Шаблон наблюдателя в Oracle
- 11. Шаблон наблюдателя в Swift
- 12. Шаблон поворота и наблюдателя
- 13. Шаблон наблюдателя в Android
- 14. Шаблон наблюдателя, реализованный в C# с делегатами?
- 15. Шаблон наблюдателя в языке Go
- 16. Вложенный шаблон наблюдателя
- 17. Шаблон подписчика/наблюдателя в Ember.js
- 18. PubSub PubSub/шаблон наблюдателя для C++?
- 19. Многопоточный шаблон наблюдателя
- 20. Шаблон наблюдателя или вспомогательный класс? (PHP)
- 21. MVC против наблюдателя шаблон
- 22. Шаблон наблюдателя - варианты
- 23. Шаблон наблюдателя с потоками
- 24. Java альтернативный шаблон наблюдателя
- 25. Шаблон наблюдателя C# с использованием генераторов
- 26. Все еще шаблон наблюдателя?
- 27. Шаблон наблюдателя: уведомление в состоянии
- 28. Образцовый шаблон наблюдателя наблюдателя с обработчиком
- 29. Шаблон наблюдателя для JTextField?
- 30. Может ли редукция рассматриваться как паб/суб или шаблон наблюдателя?
Похоже, что вы не поняли шаблон Observer в каком-то смысле. Обновленный компонент (в вашем случае скорость, gps, engineFuel и т. Д.) Известен как * Observable * или * Subject *, а компонент, который хочет знать об обновлениях * Subject *, известен как * Observer *. – CKing