【问题标题】:What Design Pattern to use?使用什么设计模式?
【发布时间】:2010-06-27 22:17:48
【问题描述】:

建模的问题是这样的:

Army 中的等级等级,从整个国家军队开始,通过野战军、子单位,最后是个人。每个级别都可能涉及到一个或多个其他类的链接,例如GeneralOfficer 或其他。野战军内部的单位需要能够相互通信,特别是为了模拟士气、凝聚力等,以及与任何敌方野战军的通信(例如,我军中的一个单位路线会影响敌人的士气)积极)。此外,每个单元都需要与层次结构中的上层和下层进行通信(出于显而易见的目的)。

我正在考虑在每个实体的类中使用实际指针(可能是双边的)表示物理层次结构中的链接(例如,每个单位中的 army* 和每个军队中的 unit* 或它们的整个集合),然后利用观察者设计模式来实现其他情况下的任何通信(比如我上面提到的情况)。

但是,我不是设计模式或编程方面的专家,我不知道是否还有其他更有效的方法可以做到这一点。任何帮助将不胜感激。

【问题讨论】:

    标签: c++ design-patterns hierarchy observer-pattern


    【解决方案1】:

    有一种模型/设计模式用于在不同实体之间进行事件通信,这些实体在通信发生之前可能不知道彼此的存在。该模式称为“发布/订阅”。

    每个实体将它想要发布的事件发送给代理,并告诉代理它会感兴趣的事件类型。代理负责确保订阅实体了解他们感兴趣的已发布事件。

    这类似于观察者模式,但在观察者模式中,每个感兴趣的实体都单独订阅它想要从中获取事件的每个实体。我认为这可能会导致大量开销,因为这需要每个人都关心事物的创建和销毁。

    反正有a nice Wikipedia article on Publish/Subscribe

    我会为单个军队使用Composite 模式(基本上意味着某种形式的树)。并且可能观察层次结构上下的关系或与兄弟姐妹的关系。但是 Observer 需要太多的注册和注销才能在一般情况下可用。

    【讨论】:

      【解决方案2】:

      听起来像“有图案的小男孩”综合症。您正在寻找一种模式,而不是考虑您的问题。

      层次结构的自然数据结构是树。我会从那开始。

      如果要求树中的每个单元都必须与所有其他单元通信,我会说 Observer 不适合您。每个单元都必须与所有其他单元一起注册。每次触发事件时,您都会收到 N 平方的消息风暴。

      调解员可能会更好。单元将向中介发送事件,允许消费者注册他们对接收特定类型消息的兴趣。生产者和消费者只知道中介,彼此不知道。松散耦合是您的朋友。

      【讨论】:

      • 好吧,我已经“解决”了这个问题,并使用指针创建了工作代码,而且还有很多。现在我想对它应用更好的 OO/设计模式方法,看看它是否可以更优雅或更高效地完成。我认为它可以,因此我的问题。也感谢您的帮助。
      • @Kristian - 没有人可以从您的原始帖子中看出这一点。我只是重新阅读它,不清楚这是一个假设问题还是对现有解决方案的描述。
      • 是的,可能是,但解决方案是否存在无关紧要。我确信其他人已经模拟了类似的问题,并且可能有比我更好的解决方案。
      【解决方案3】:

      对于结构建模,这看起来像是Composite 模式的经典应用。然后您可以使用VisitorInterpreter 对子单元的操作进行建模。

      【讨论】:

      • 谢谢,我会看看那些图案(仍然很绿)。
      猜你喜欢
      • 2017-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-22
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多