Шаблоны проектирования - PullRequest
3 голосов
/ 27 апреля 2011

Я пытаюсь понять шаблоны проектирования (в частности, шаблон Observer).Я пытаюсь создать шаблон дизайна для сценария ниже (в частности, второй абзац).Я включил изображение UML-диаграммы, которую мне удалось создать до сих пор.Могут ли люди посоветовать, правильно ли это / неправильно / адекватно / неадекватно, или дать мне какие-нибудь советы, которые могли бы помочь?Я пытался использовать шаблон Observer для моделирования системы - есть ли дополнительные модели, которые можно использовать для моделирования этого сценария?

Рассмотрим проект системы для поддержки бронирования и оповещения о статусе рейса для авиакомпании.Система централизованно хранит информацию о зарегистрированных клиентах и ​​контролирует доступ клиентов к информации.Клиент ведет профиль, описывающий некоторую основную информацию, включая имя, страну проживания, пол, дату рождения, адрес электронной почты и номер мобильного телефона.Клиент может выполнить поиск авиабилетов в оба конца, указав название города или код аэропорта для отправления и назначения.Найдя маршрут приемлемых рейсов, клиент может приобрести авиабилеты эконом-класса, бизнес-класса или первого класса.После совершения покупки клиент может выбрать места на выбранных рейсах в оплаченном классе обслуживания.Система будет отправлять уведомления о рейсах на адрес оповещения клиента, который может быть адресом электронной почты и / или номером мобильного телефона, в зависимости от выбора клиента.Предупреждение может указывать на задержку рейса, отмену рейса или некоторые другие изменения в статусе рейса, которые могут быть внесены в будущие версии системы.

В какой-то момент рейс становится доступным для покупки с указанной датой полета.Клиент может приобрести место на рейсе до одной недели до даты вылета;после этой даты рейс закрывается для дальнейшей покупки места.Кроме того, как только рейс становится доступным для покупки, его статус является своевременным до одного дня до рейса, после чего он может задержаться при наступлении погодной задержки, отменен при принятии решения об отмене рейса и приземлился при успешном завершении полета.завершение полета.Полет перестает существовать после его отмены или приземления.

http://i.stack.imgur.com/YB9lJ.jpg

Ответы [ 2 ]

1 голос
/ 27 апреля 2011

Шаблон наблюдателя должен быть в порядке.Только комментарий - изображение, которое вы предоставили, не является полным.

  1. Старайтесь избегать прямой связи между наблюдателем и субъектом.
  2. Вместо этого используйте класс, который может управлять всеми наблюдателями.
  3. Это обеспечивает гибкость вашего проекта, чтобы иметь несколькопредметные классы публикуют одно и то же событие.В будущем, если у вас новый предмет, вам не нужно вносить никаких изменений в IClient.

Конечно, это зависит от ваших потребностей.

Subject1 -----                                                             ---- Client1
Subject2 ----- ISubject------  Observer implements IObserver  --- IClient  ---- Client2
                                                                           ---- Client3
  1. Наблюдатель ведет списокIClient и подписывается на Subject1, subject2 ... и так далее.
  2. Любой субъект может отправить уведомление вместе с указанием состояния (субъекта). Наблюдатель просматривает список IClient и уведомляет каждого клиента.
  3. Это полезно, когда одно и то же уведомление может появляться от более чем одного субъекта.Пример: переименование папки выполняется с помощью медленного двойного щелчка или нажатия F2 в контексте Windows
0 голосов
/ 28 апреля 2011

В отличие от Splendor я бы не использовал третий класс, который управляет всеми наблюдателями.

  1. Это добавляет сложности.
  2. Повторное использование событий для других типов объектов, скорее всего, приведет к нарушению принципа подстановки Лискова.

Однако, если у вас есть класс Car, вы можете получить его Volvo : Car, и вы все равно сможете работать с подписчиками.

Ваш дизайн находится вдругие слова в порядке.

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

...