首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >设计模式

设计模式
EN

Stack Overflow用户
提问于 2011-04-27 00:23:49
回答 2查看 691关注 0票数 3

我试图理解设计模式(特别是观察者模式)。我试图为下面的场景(特别是第二段)创建一个设计模式。到目前为止,我已经包含了UML图的图像。请大家告诉我,它是否正确/错误/充分/不足,或者给我一些有用的建议?我尝试过使用观察者模式来建模系统--是否还有其他模式可以用来建模这个场景?

考虑为航空公司设计支持航班预订和航班状态警报的系统。该系统集中存储有关注册客户的信息,并控制客户对该信息的访问。客户保留一份个人资料,描述一些基本信息,包括姓名、居住国、性别、出生日期、电子邮件地址和移动电话号码。客户可以通过输入城市名称或机场代码来搜索航空公司的往返航班。在找到可接受航班的行程后,客户可以购买经济舱、商务舱或头等舱的航班。在完成购买后,客户可以在所选择的航班上选择所支付的服务级别的座位。该系统将将有关航班的警报发送到客户的警报地址,该地址可以是电子邮件地址和/或移动号码,这取决于客户的选择。警报可能表示航班延误、航班取消或系统未来版本中可能引入的对飞行状态的某些其他更改。

在某一时刻,可以在指定的飞行日期购买航班。客户可以在np航班上购买一个座位,到航班日期前一周;在此日期之后,航班将关闭,以便进一步购买座位。此外,一旦一次航班可以购买,它的状态是准时的,直到飞行前一天,在此之后,它可能会因天气延误而延迟,在决定取消航班时被取消,并在成功完成飞行后降落。航班被取消或降落后就不复存在了。

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

EN

回答 2

Stack Overflow用户

发布于 2011-04-27 10:53:35

观察模式应该没问题。只有注释是您提供的图像不完整。

使用一个可以管理所有subject.

  • Instead的类来避免观察者和observers.

  • This之间的直接耦合,为您的设计提供了灵活性,可以让多个主题类发布相同的事件。将来,如果您有一个新的主题,那么您就不需要对IClient.

做任何更改了。

当然,这取决于你的需要。

代码语言:javascript
复制
Subject1 -----                                                             ---- Client1
Subject2 ----- ISubject------  Observer implements IObserver  --- IClient  ---- Client2
                                                                           ---- Client3

  1. 观察者维护IClient列表并订阅Subject1、subject2.诸若此类。
  2. 任何一个主题都可以发送通知和状态(主题)引用观察者,遍历IClient列表并通知每个客户端。
  3. --当来自多个主题的相同通知发生时,这是非常有用的。示例:在windows上下文中使用F2的慢速双击或按下

完成文件夹重命名

票数 1
EN

Stack Overflow用户

发布于 2011-04-28 13:00:17

不像Splendor,我不会使用管理所有观察者的第三级。

它为其他类型的对象添加了complexity.

  • Reusing事件,这很可能导致违反Liskovs替换原则。

但是,如果您有一个Car类,您可以派生它为Volvo : Car,并且仍然可以使用订阅服务器。

换句话说,你的设计很好。

请注意,我没有读到你引用的那篇文章。如果您需要更多帮助,请将文本分解为您认为设计模式适用的部分。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5797993

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档