建模的问题是:
Army
内的等级层次,从整个国家军队开始,通过野战军队,子团队,最终是个人。每个级别可能涉及到一个或多个其他类的链接,例如General
或Officer
或其他类别。一支野战军队中的单位需要能够相互沟通,特别是为了建模士气,凝聚力等,以及任何敌军野战军队(例如我军队中的单位路线影响敌人的士气)正)。此外,每个单元需要与层次结构中的上下相关联(为了明显的目的)。
我在考虑在每个实体的类中使用实际指针(可能是双边)表示物理层次结构中的链接(例如,每个单元中的army*
和unit*
或整个集合他们在每个军队中)然后利用观察员设计模式在其他情况下实施任何通信(例如我上面提到的情况)。
然而,由于不是设计模式或编程方面的专家,我不知道是否还有其他更有效的方法来做到这一点。任何帮助将不胜感激。
答案 0 :(得分:3)
听起来像“有模式的小男孩”综合症。你正在寻找一种模式,而不是考虑你的问题。
层次结构的自然数据结构是树。我从那开始。
如果要求树中的每个单元必须与所有其他单元通信,我会说Observer不适合您。每个单位都必须在所有其他单位登记。每次事件发生时,你都会有一个N平方的消息风暴。
调解员可能会更好。单位将向调解员发送事件,允许消费者注册他们对接收特定类型消息的兴趣。生产者和消费者只知道调解员,而不是彼此。松耦合是你的朋友。
答案 1 :(得分:3)
有一种模型/设计模式用于在不同实体之间传递事件,这些事件可能在通信发生之前不知道每个人的存在。该模式称为“发布/订阅”。
每个实体将要发布的事件发送给代理,并告诉代理它将感兴趣的事件类型。代理处理确保订阅实体了解他们感兴趣的已发布事件。
这就像Observer模式一样,但在Observer模式中,每个感兴趣的实体都会单独订阅它想要事件的每个实体。我认为这可能会导致很多开销,因为这需要每个人都关心事物的创造和破坏。
无论如何,有a nice Wikipedia article on Publish/Subscribe。
我会使用Composite模式(基本上是指某种形式的树)用于各个军队。并且可能是观察者在层次结构中或与兄弟姐妹之间的关系。但Observer需要过多的注册和取消注册才能在一般情况下使用它。
答案 2 :(得分:1)
对于结构建模,这看起来像Composite模式的经典应用。然后,您可以使用Visitor或Interpreter对子单元上的操作进行建模。