对象管理器?设计模式

use*_*111 7 java oop

我有很多需要传递给其他对象的对象.这是一个游戏,因此玩家需要了解世界,世界需要了解地图等.

我想要创建一个"Master"对象管理器,然后用它来注册这些对象,而不是传递所有这些.我会传递主对象管理器,所有需要的东西都可以做一个"masterObject.getPlayer()"或其他什么.

这是一个真正的设计模式吗?如果是这样,它叫什么?任何缺点.

DJC*_*rth 16

这是一种经常使用的方法,当合理处理时非常有用.虽然有些人不喜欢他们并将他们称为"上帝阶级",但如果结构合理,他们真的不是这样.如果你把它想象成"拥有一切的类",问题就会开始出现 - 但如果你考虑信息结构,你应该没问题.

我们来举个例子吧.让我们打电话给你对"游戏"感兴趣的课程.这始终是一个好的起点,因为它代表了一个真实世界的实体.游戏应该知道自己的事情:player1,player2,map,turnNumber.在Game上放置方法来访问它们.这是完全正确和良好的设计.然后这些对象将反过来了解自己的事情.玩家将知道名字,技能等级,能量剩余.地图将知道每个方格的大小和地形.如果您需要了解单个方块,那么您可以使用Map类实现getSquare(x,y).广场知道它的地形类型.

关键是你只需要将方法传递给它所需的东西.计算两个单元之间路径的方法以Map为参数.你不传递游戏,让它提取地图.

许多系统都有这样的对象.java.lang.Runtime就是一个例子.但是,您应该通过上述技术最大限度地减少使用.

有一个非常重要的诱惑要避免.在您发现几乎所有方法都传递了您的"Master"类之后,您可能会想到"为什么我不将这个类用于每个方法而不用作参数?".这就是Singletons.避免.


Jeu*_*une 0

尝试看看观察者模式。它类似于你所描述的世界。有一个主对象(可观察的),并且有将自己注册到主对象的观察者。如果世界发生变化,主对象只是通知观察者。

此外,我想您可以添加其他方法来满足您的需求,但这本质上就是概念。