小编tob*_*son的帖子

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

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

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

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

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

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


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

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

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

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

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


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

architecture oop design-patterns

8
推荐指数
1
解决办法
2369
查看次数

ActiveSupport中mattr_accessor和cattr_accessor之间的区别?

我无法从通过源的区别是什么之间找工作了cattr_*,并mattr_*分别在类和模块提供的方法.我读到了这个问题:Rails模块中的mattr_accessor是什么?它提供了两种方法的一些细节,但没有强调差异.

所以我的问题是它们之间的区别是什么?为什么我们在源代码中实际上完全相同时需要两套方法?另外,我们应该在什么时候使用?

ruby ruby-on-rails activesupport

7
推荐指数
1
解决办法
4297
查看次数

Java UUID字符串表示自然排序

假设我有两个UUID实例:

uuid1 = UUID.randomUUID();
uuid2 = UUID.randomUUID();
Run Code Online (Sandbox Code Playgroud)

如果那两个比较uuid1小于uuid2ie,

uuid1.compareTo(uuid2) // -1
Run Code Online (Sandbox Code Playgroud)

他们的字符串表示是否总是比较以给出相同的结果,即,

uuid1.toString().compareTo(uuid2.toString()) // -1 ????
Run Code Online (Sandbox Code Playgroud)

java string comparison uuid

4
推荐指数
1
解决办法
3313
查看次数