我有一个涉及相对较大的对象层次结构的问题,如下所示:
- 游戏拥有一个社区经理 - 社区经理拥有一个网络 - 网络拥有许多玩家 - 网络有许多友谊 - 玩家拥有一个策略经理 - 玩家拥有一个记忆 - 玩家拥有一个邻居 - 邻居有很多玩家 - 策略经理有许多策略
如您所见,这个层次结构相对复杂,并且至少在一个地方存在循环(网络有许多代理,每个代理都有一个网络)。目前,我正在使用
在构建复杂的对象层次结构方面,使用什么样的模式最好?我已经阅读了关于“工厂方法”、“抽象工厂”和“建造者”设计模式的相关资料,并认为工厂模式之一是适合的,但我真的不知道如何将它应用于如此复杂的层次结构?
我认为我需要为系统的每个部分创建许多工厂,但这将导致一组反映模型类的工厂类。
编辑:从迄今为止给出的建议的讨论中清楚地得知,我应该解释更多关于为什么需要工厂来构建对象层次结构而不是允许构造函数本身构建它们的依赖项。
这是因为我正在使用依赖注入来辅助测试驱动开发。我采用一种模拟主义方法进行测试,这需要能够注入代表对象依赖项的模拟对象,因此我必须避免在任何构造函数中使用
从迄今为止给出的建议中,似乎有许多可能的方法:
- 在每个类中创建一个辅助构造函数,用于构建对象构造所需的任何依赖项。这允许依赖注入和简单的对象层次结构构建。 - 对每个域类使用一个工厂类(单个工厂类或层次结构取决于使用的工厂模式类型)来处理其构造。 - 在构建过程中只有某些情况下不同的子类需要构建时,使用这些方法的组合。
我倾向于采取最后一条路线。对于这种情况,使用哪种方法最佳?
- 游戏拥有一个社区经理 - 社区经理拥有一个网络 - 网络拥有许多玩家 - 网络有许多友谊 - 玩家拥有一个策略经理 - 玩家拥有一个记忆 - 玩家拥有一个邻居 - 邻居有很多玩家 - 策略经理有许多策略
如您所见,这个层次结构相对复杂,并且至少在一个地方存在循环(网络有许多代理,每个代理都有一个网络)。目前,我正在使用
GameFactory
类上的静态构造方法来构建整个层次结构,但我相信这是最不灵活的方法!在构建复杂的对象层次结构方面,使用什么样的模式最好?我已经阅读了关于“工厂方法”、“抽象工厂”和“建造者”设计模式的相关资料,并认为工厂模式之一是适合的,但我真的不知道如何将它应用于如此复杂的层次结构?
我认为我需要为系统的每个部分创建许多工厂,但这将导致一组反映模型类的工厂类。
编辑:从迄今为止给出的建议的讨论中清楚地得知,我应该解释更多关于为什么需要工厂来构建对象层次结构而不是允许构造函数本身构建它们的依赖项。
这是因为我正在使用依赖注入来辅助测试驱动开发。我采用一种模拟主义方法进行测试,这需要能够注入代表对象依赖项的模拟对象,因此我必须避免在任何构造函数中使用
new
。从迄今为止给出的建议中,似乎有许多可能的方法:
- 在每个类中创建一个辅助构造函数,用于构建对象构造所需的任何依赖项。这允许依赖注入和简单的对象层次结构构建。 - 对每个域类使用一个工厂类(单个工厂类或层次结构取决于使用的工厂模式类型)来处理其构造。 - 在构建过程中只有某些情况下不同的子类需要构建时,使用这些方法的组合。
我倾向于采取最后一条路线。对于这种情况,使用哪种方法最佳?