对象C ++中的状态或观察者模式

时间:2017-01-03 19:49:47

标签: design-patterns uml state observer-pattern class-diagram

我只是对观察者和状态模式之间的区别感到困惑。我得到了一个项目,客户是飞机上的飞机,计算不同传感器的数据,如GPS,速度,燃料水平,然后数据被发送到网络,然后发送到服务器。目前我已经将观察者模式用于我的类图。可以从下面查看类图,如果我的解决方案是正确的,并且选择的设计模式是否适合此解决方案,请告诉我。 Class Diagram

2 个答案:

答案 0 :(得分:2)

  

我对观察者和状态模式之间的差异感到有点困惑

观察者模式主要用于有一个对象或一组对象(称为观察者),这些对象希望被告知/更新一个或多个对象状态的任何变化(称为Observables或Subjects)。在您的示例中,Network是想要了解Airplane数据更改的 Observer 。另一方面,SpeedGPS等飞机数据对象是Network想要的 Observable Subjects 保持对变化的追踪。 (你的术语似乎是颠倒过来的)。每当飞机数据Speed发生变化时,必须通过相应的 Speed 对象通知Network此更改。

另一方面,状态模式主要用于您的用例可以表示为有限状态机的情况。在您的示例中,飞机的整个起飞,飞行和着陆过程可以在具有逻辑状态的有限状态机中表示,例如着陆,起飞,飞行,着陆等。

现在应该很清楚 Observer State 模式在您的情况下都有一个有效的应用程序,其中 Observer 模式适合于您在问题中描述的主要问题陈述。也就是说,没有必要有单独的 Observable 对象,如速度,GPS等。您可以拥有一个名为FlighData Observable 对象,该对象具有速度,GPS,engineFuelLevel,engineTemp等属性。

我还建议您在应用程序中实现 Observer 模式之前更好地理解它。以下是一些入门链接:

答案 1 :(得分:1)

制作状态事件动作自动机来定义系统(比如错误,互锁或其他一些检查条件等) - 可以在这里使用状态设计模式。 当对象之间存在一对多关系时使用Observer模式,例如,如果修改了一个对象,则会自动通知其依赖对象。当observable不知道观察者的数量时,我们使用观察者设计模式,并且应该能够在不知道对象的情况下通知其他对象。