【发布时间】:2011-01-09 03:07:58
【问题描述】:
我有一个问题,涉及到一个比较大的对象层次结构如下:
- 游戏有一个社区管理员
- 社区经理有一个网络
- 网络有很多玩家
- 网络有很多朋友
- 玩家有一个策略经理
- 玩家有一个记忆
- 玩家有一个社区
- 社区有很多玩家
- 战略经理有很多战略
如您所见,层次结构相对复杂,并且至少在一个地方是循环的(网络有许多代理,它们具有一个邻域,而邻域又具有一个网络)。目前我在GameFactory 类上使用静态构造方法来构造整个层次结构,但我很确定这是最不灵活的方法!
在构建复杂的对象层次结构方面,最好使用什么模式?我已经阅读了Factory Method、Abstract Factory 和Builder 模式,我认为其中一种工厂模式是合适的,但我真的不知道如何将它应用到如此复杂的层次结构中?
在我看来,系统的每个部分都需要许多工厂,但这会导致工厂类的集合反映模型类。
编辑:从目前给出的建议中的讨论中可以清楚地看出,我应该更多地解释为什么我需要工厂来构建我的对象层次结构,而不是允许构造函数自己构建它们的依赖关系。
这是因为我使用依赖注入来帮助测试驱动开发。我正在采用模拟方法进行测试,这需要能够注入代表对象依赖项的模拟,因此我必须避免在任何构造函数中使用new。
从目前给出的建议看来,有很多可能的方法:
- 在每个类中创建一个辅助构造函数,用于构建正在构造的对象所需的任何依赖项。这允许依赖注入和简单的对象层次结构构造。
- 有一个工厂类(可以是单个工厂类,也可以是它们的层次结构,具体取决于所使用的工厂模式的类型)映射到每个域类以处理其构造。
- 使用这些方法的组合,其中工厂类仅在构造过程中存在变化时创建(即在某些情况下需要构造不同的子类)
我倾向于走最后一条路线。在这种情况下采取的最佳方法的共识是什么?
编辑:我正在撤销当前的答案(Patrick Karcher 的答案),因为现在这个问题的重点已经澄清,所有建议都不是完整的答案。
【问题讨论】:
-
为了清楚起见,最好提出一个新问题(参考这个问题)。
标签: design-patterns oop architecture