Я просто немного смущен различием между шаблоном наблюдателя и состояния. Мне дали проект, в котором клиент является самолетом на рейсе, который вычисляет данные для разных датчиков, таких как GPS, скорость, уровень топлива, а затем данные отправляются в сеть, а затем на сервер. На данный момент я использовал шаблон наблюдателя для моей диаграммы классов. Диаграмму классов можно просмотреть из нижеследующего, пожалуйста, дайте мне знать, если мое решение правильное и если выбранный шаблон дизайна подходит для этого решения. Состояние или шаблон наблюдателя в объекте C++
ответ
Создайте автомат состояния событий для определения системы (скажем, для ошибки, блокировки или некоторых других условий проверки и т. Д.). Здесь можно использовать шаблон состояния. Шаблон наблюдателя используется, когда между объектами существует один-много отношений между объектами, например, если один объект изменен, его зависимые объекты должны быть уведомлены автоматически. Мы используем шаблон проектирования наблюдателя, когда наблюдаемый не знает ни одного наблюдателя и должен иметь возможность уведомлять другие объекты, не зная объектов.
Вы сказали: * «Шаблон наблюдателя используется, когда между объектами существует одно-много отношений» *. Не правда. Вы можете использовать шаблон Observer, даже если у вас есть одно наблюдение, которое наблюдается одним наблюдаемым. Кроме того, вы отмечаете, что шаблон состояния является лучшим выбором, не объясняя, как пример в исходном вопросе лучше реализуется через шаблон состояния. Какие компоненты данного примера могут быть включены в государственный образец и как? Как бы то ни было, вы, похоже, определили шаблоны, но не использовали их в текущем контексте. – CKing
Я просто немного запутались с разницей между наблюдателем и государственного образцом
наблюдателем шаблоном в основном используются, когда у вас есть объект или набор объектов (известный как наблюдатели), которые хотят быть проинформированы/обновлены о любых изменениях состояния одного или нескольких объектов (известных как наблюдаемые или субъекты). В вашем примере Network
является Observer, который хочет знать об изменениях в данных самолета. С другой стороны, объекты данных аэроплана, такие как Speed
, GPS
и т. Д., Являются Наблюдаемые или Объекты, что Network
хочет сохранить дорожку для изменений. (Кажется, что ваша терминология отменена). Всякий раз, когда данные самолета, такие как его Speed
, меняются, Network
должен быть уведомлен об этом изменении соответствующим объектом Speed .
Состояние Образец с другой стороны в основном используется, когда ваш прецедент можно представить в виде конечного автомата. В вашем примере весь взлет, летающий и посадочный процесс самолета можно представить на конечной машине с логическими состояниями, такими как приземление, взлет, полет, посадка и т. Д.
Теперь должно быть ясно что Observer и Состояние У шаблона есть действующее приложение в вашем случае с образцом Observer, который соответствует основному заявлению о проблеме, которое вы описали в своем вопросе. Тем не менее, нет необходимости иметь отдельно Наблюдаемые объекты, такие как скорость, GPS, et.c. Вы можете иметь один Наблюдаемые объект под названием FlighData
, который имеет атрибуты, такие как скорость, GPS, engineFuelLevel, engineTemp и т.д.
Я также рекомендовал бы вам получить лучшее понимание наблюдателя картины, прежде чем применять его в ваше приложение.Вот некоторые ссылки, чтобы начать работу:
Похоже, что вы не поняли шаблон Observer в каком-то смысле. Обновленный компонент (в вашем случае скорость, gps, engineFuel и т. Д.) Известен как * Observable * или * Subject *, а компонент, который хочет знать об обновлениях * Subject *, известен как * Observer *. – CKing