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

Design patterns 对象C+中的状态或观察者模式+;,design-patterns,uml,observer-pattern,class-diagram,state-pattern,Design Patterns,Uml,Observer Pattern,Class Diagram,State Pattern,我只是对观察者和状态模式之间的区别有点困惑。我得到了一个项目,客户是飞行中的飞机,它计算不同传感器的数据,如GPS、速度、燃油油位,然后将数据发送到网络,然后发送到服务器。目前,我已经在类图中使用了观察者模式。类图可以从下面查看,请让我知道我的解决方案是否正确,以及选择的设计模式是否适合此解决方案 创建一个状态事件动作自动机来定义系统(比如错误、联锁或其他一些检查条件等)——可以在这里使用状态设计模式。 当对象之间存在一对多关系时使用观察者模式,例如,如果修改了一个对象,将自动通知其依赖对象。当

我只是对观察者和状态模式之间的区别有点困惑。我得到了一个项目,客户是飞行中的飞机,它计算不同传感器的数据,如GPS、速度、燃油油位,然后将数据发送到网络,然后发送到服务器。目前,我已经在类图中使用了观察者模式。类图可以从下面查看,请让我知道我的解决方案是否正确,以及选择的设计模式是否适合此解决方案

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

我只是对观察者和状态模式之间的区别有点困惑

当您有一个对象或一组对象(称为观察者)希望了解/更新一个或多个对象(称为观察者或被观察者)状态的任何变化时,通常使用观察者模式。在您的示例中,
网络
是希望了解飞机数据变化的观察者。另一方面,诸如
速度
GPS
等飞机数据对象是
网络
希望跟踪变化的可观察对象或对象。(你的术语似乎颠倒了)。每当飞机数据(如
速度
发生变化时,必须通过相应的速度对象通知
网络

另一方面,当用例可以表示为有限状态机时,通常使用状态模式。在您的示例中,飞机的整个起飞、飞行和着陆过程可以在有限状态机中用逻辑状态表示,如着陆、起飞、飞行中、着陆等

现在应该很清楚,观察者和状态模式在您的案例中都有有效的应用,观察者模式适合于您在问题中描述的主要问题陈述。也就是说,不需要有单独的可观测对象,如速度、GPS等。您可以拥有一个名为
FlighData
的可观察对象,该对象具有诸如速度、GPS、engineFuelLevel、engineTemp等属性

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


看起来您在某些方面误解了观察者模式。被更新的组件(在您的例子中是速度、gps、发动机燃油等)称为可观察对象或主体,而想要了解主体更新的组件称为观察者。您说过,“当对象之间存在一对多关系时,使用观察者模式”。不是真的。即使有一个可观察对象正在被一个可观察对象观察,也可以使用观察者模式。另外,您提到状态模式是一个更好的选择,但没有解释如何通过状态模式更好地实现原始问题中的示例。给定示例的哪些组件可以装配到状态模式中,以及如何装配?目前,您似乎已经定义了模式,但没有在当前上下文中定义它们的用法。