一个类是否可以在其容器上保留引用?

时间:2012-05-10 04:36:23

标签: design-patterns architecture containers

我正在创建一个非常简单的RTS游戏作为个人项目。到目前为止,我已经完成了一些实验工作,我的瓷砖,相机和单位运动工作正常:)

但是,我想为单元选择系统添加功能,它带来了一些问题。我有一个包含单位列表的Player类,但我想创建一个Squad类,主要是为了创建一些组和属性快捷方式来轻松访问这些组。如果我想在一个组中添加一个单元,我必须先从它的当前组中删除该单元,然后再将其添加到新组中。 AddUnit方法将在Squad类中,但我不想在我添加的每个新单元的所有其他小组中搜索以检查并删除该单元。如果我在Unit类中保留对所有者小队的引用怎么办?它会更容易被删除,但是可以吗?如果我想将一个单位转移到另一个玩家,会出现同样的问题,我可以保留对该单位中玩家的引用吗?嗯,我知道我可以,但这是可以接受的吗?还有其他选择吗?

3 个答案:

答案 0 :(得分:3)

是的,这是可以接受的,并且有双向参考是个好主意。从容器到项目以及从项目到容器。当您使用item(示例中的Unit)执行某些操作时,无需在所有容器中搜索此项目,就可以更轻松地获取其容器。从单元获取参考将更简单,更快速,更易读 - 它只是更好的设计。

答案 1 :(得分:3)

如果您的语言支持它,您应该使用弱引用,以便可以正确释放容器,而无需将单位的小队显式设置为null,这很容易出错。

答案 2 :(得分:0)

虽然我同意@dantuch说它通常是可以接受的,但只有你可以决定在这一点上是否是个好主意,这取决于你想要将单位和小队(和玩家)的概念结合起来的程度。 / p>

谈论一个没有小队的单位是否有意义?还是没有玩家?

我意识到我正在用其他问题回答你的问题,但是试着以抽象的方式思考你的模型,你会意识到紧密地结合这些概念是否可以接受,或者是否更喜欢使用类似观察者的东西评论中提到的模式。