2017-01-03 2 views
3

Я просто немного смущен различием между шаблоном наблюдателя и состояния. Мне дали проект, в котором клиент является самолетом на рейсе, который вычисляет данные для разных датчиков, таких как GPS, скорость, уровень топлива, а затем данные отправляются в сеть, а затем на сервер. На данный момент я использовал шаблон наблюдателя для моей диаграммы классов. Диаграмму классов можно просмотреть из нижеследующего, пожалуйста, дайте мне знать, если мое решение правильное и если выбранный шаблон дизайна подходит для этого решения. Class Diagram Состояние или шаблон наблюдателя в объекте C++

+0

Похоже, что вы не поняли шаблон Observer в каком-то смысле. Обновленный компонент (в вашем случае скорость, gps, engineFuel и т. Д.) Известен как * Observable * или * Subject *, а компонент, который хочет знать об обновлениях * Subject *, известен как * Observer *. – CKing

ответ

1

Создайте автомат состояния событий для определения системы (скажем, для ошибки, блокировки или некоторых других условий проверки и т. Д.). Здесь можно использовать шаблон состояния. Шаблон наблюдателя используется, когда между объектами существует один-много отношений между объектами, например, если один объект изменен, его зависимые объекты должны быть уведомлены автоматически. Мы используем шаблон проектирования наблюдателя, когда наблюдаемый не знает ни одного наблюдателя и должен иметь возможность уведомлять другие объекты, не зная объектов.

+0

Вы сказали: * «Шаблон наблюдателя используется, когда между объектами существует одно-много отношений» *. Не правда. Вы можете использовать шаблон Observer, даже если у вас есть одно наблюдение, которое наблюдается одним наблюдаемым. Кроме того, вы отмечаете, что шаблон состояния является лучшим выбором, не объясняя, как пример в исходном вопросе лучше реализуется через шаблон состояния. Какие компоненты данного примера могут быть включены в государственный образец и как? Как бы то ни было, вы, похоже, определили шаблоны, но не использовали их в текущем контексте. – CKing

0

Я просто немного запутались с разницей между наблюдателем и государственного образцом

наблюдателем шаблоном в основном используются, когда у вас есть объект или набор объектов (известный как наблюдатели), которые хотят быть проинформированы/обновлены о любых изменениях состояния одного или нескольких объектов (известных как наблюдаемые или субъекты). В вашем примере Network является Observer, который хочет знать об изменениях в данных самолета. С другой стороны, объекты данных аэроплана, такие как Speed, GPS и т. Д., Являются Наблюдаемые или Объекты, что Network хочет сохранить дорожку для изменений. (Кажется, что ваша терминология отменена). Всякий раз, когда данные самолета, такие как его Speed, меняются, Network должен быть уведомлен об этом изменении соответствующим объектом Speed ​​.

Состояние Образец с другой стороны в основном используется, когда ваш прецедент можно представить в виде конечного автомата. В вашем примере весь взлет, летающий и посадочный процесс самолета можно представить на конечной машине с логическими состояниями, такими как приземление, взлет, полет, посадка и т. Д.

Теперь должно быть ясно что Observer и Состояние У шаблона есть действующее приложение в вашем случае с образцом Observer, который соответствует основному заявлению о проблеме, которое вы описали в своем вопросе. Тем не менее, нет необходимости иметь отдельно Наблюдаемые объекты, такие как скорость, GPS, et.c. Вы можете иметь один Наблюдаемые объект под названием FlighData, который имеет атрибуты, такие как скорость, GPS, engineFuelLevel, engineTemp и т.д.

Я также рекомендовал бы вам получить лучшее понимание наблюдателя картины, прежде чем применять его в ваше приложение.Вот некоторые ссылки, чтобы начать работу:

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