让对象互相引用是不好的OOP练习?

请原谅我的noobness。 我正在制作一个游戏,其中有几个角色彼此之间有关系,他们需要能够互相交流并存储一些关于彼此之间感觉如何的关系数据。

我为每个角色都有一个对象。 为了执行这些交互,这些字符对象中的每一个都具有所有其他字符对象的数组是不是很糟糕? 有一个更好的方法吗?

编辑回答问题:我的语言是C#。

我在想的是安装类会创建一个所有字符的数组,然后将该数组作为参数传递给每个字符的构造函数。

至于关系的类型,有五个字符,但我希望可以扩展以防以后再添加更多字符。 角色之间有对话。 他们所说的话是受他们的情绪以及他们对角色感觉的影响。 另外,另一个角色对他们的评价会影响他们的情绪以及他们对角色的感受。 他们可以进行一对一的对话或者分组对话,所以角色A可以一次对角色B,C,D,E和F进行说明。

顺便说一下,我从这个主题学到了很多东西。 谢谢大家!谢谢!


对象保持彼此引用不是不好的做法 - 树形图中的节点保留对其子节点的引用并且子节点保留对其父节点的引用的情况并不少见。

有一件事可能成为一个问题,就是你描述的每个角色都保留对所有其他角色的引用。 这是一个NxN矩阵,随着字符数量的增加,会使用内存。

在每个字符对象中存储所有字符对象列表的替代方案可能是建立关键字列表或字典,其中关键字是(字符1,字符2),并且内容是关系。 这个列表可以是全局的,并存储所有角色之间的所有关系。 这里的优点是它随着实际关系的数量呈线性增长,而不是与系统中字符的数量呈指数关系。


避免不必要的对象之间的引用通常是好事,但确定什么是不必要的是非常主观的并且取决于问题。

如果每个角色都有一个唯一的标识符(例如,一个唯一的名称),那么您只能为每个角色存储一组角色标识符和对该角色的“感觉”。 使用其他CharacterManager类型,您可以根据标识符查找字符。

另一种选择(如果意见只是游戏的一个小方面可能更好)是有一个单独的“RelationshipManager”类,它可以回答诸如“字符X如何感受字符Y”的查询? 这可能是一个更好的设计,因为这个责任是与你的核心角色分开管理的。 这位经理可以直接引用字符,也可以使用标识符。


不,这根本不是一个坏习惯。 显然,你可以这样做,以便难以维护或理解,但对象之间的引用没有任何内在的错误。

虽然我会推荐您的语言提供的任何集合类型而不是数组,但您提出的建议没有任何问题。

链接地址: http://www.djcxy.com/p/51035.html

上一篇: Is it bad OOP practice to have objects reference each other?

下一篇: How do you design object oriented projects?