用于构建大型对象层次结构的模式

tob*_*son 8 architecture oop design-patterns

我有一个涉及相对较大的对象层次结构的问题,如下所示:

  • 游戏有一个社区经理
  • 社区经理有一个网络
  • 网络有很多玩家
  • 网络有很多友谊
  • 球员有一名战略经理
  • 玩家有一个记忆
  • 球员有一个邻居
  • 邻里有很多球员
  • 战略经理有很多策略

如您所见,层次结构相对复杂,并且至少在一个地方是循环的(网络有许多代理具有一个具有一个网络的邻域).目前我在类上使用静态构造方法GameFactory来构建整个层次结构,但我很确定这是最不灵活的方法!

在构建复杂的对象层次结构方面,最好使用哪种模式?我读过了的Factory Method,Abstract FactoryBuilder模式,我觉得工厂模式之一是合适的,但我真的不知道如何将它应用到这样一个复杂的层次?

在我看来,系统的每个部分都需要很多工厂,但这会导致一组镜像模型类的工厂类.


编辑:从目前为止给出的建议讨论中可以清楚地看出,我应该更多地解释为什么我要求工厂构建我的对象层次结构而不是允许构造函数自己构建它们的依赖关系.

这是因为我使用依赖注入来帮助测试驱动开发.我正在采用一种模拟主义方法进行测试,这需要能够注入表示对象依赖关系的模拟,因此我必须避免new在任何构造函数中使用.

根据目前给出的建议,似乎有很多可能的方法:

  • 在每个类中创建一个辅助构造函数,用于构建正在构造的对象所需的任何依赖项.这允许依赖注入和简单的对象层次结构.
  • 有一个工厂类(根据所使用的工厂模式的类型,可以是单个工厂类或它们的层次结构)映射到每个域类来处理它的构造.
  • 使用这些方法的组合,其中工厂类仅在构造过程中存在变化时创建(即,在某些情况下需要构造不同的子类)

我倾向于采取最后的路线.在这种情况下采取最佳方法的共识是什么?


编辑:我正在撤销当前的答案(Patrick Karcher的答案),因为现在已经澄清了这个问题的重点,没有一个建议是完整的答案.

KLE*_*KLE 2

如果没有什么变化,即。如果您的构建过程是固定的,我会推荐最简单的方法:让对象本身负责构建它们的依赖对象,并建立链接(可能是双向的)。

示例:对于具有子集合的父对象,父对象可以有一个 addChild 方法来确保双向关系的一致性:

  1. 获取孩子的前一个父母;如果不为空,则从旧父级中删除子级。
  2. 将子项中的父项字段更改为新的父项
  3. 将子项添加到新父项的子项集合中。

如果有什么变化,例如应在某些上下文中使用的子类,那么您必须准确定义变化的内容。只有找到自己的确切需求后,正确的模式才可能出现。:-)

我们可以帮助完成最后一部分,但您是唯一可以提供所需信息的人......;-)