对于游戏,我正在创建许多确定NPC例程的不可变对象。一个节点对象更改x和z的值,一个对象更改y的值,一个对象更改角度,依此类推。我为他们开设了十二个不同的班级。这些对象是NPC所走路径的网络。这些对象还捆绑成一个更大的对象,即节点。这个节点在一段时间内一直是NPC的操作者,直到分配了下一个节点。
我希望最终有数千个节点。但是我确信这些节点中的对象通常是某些其他节点中对象的重复。
为了保持此系统在内存中的占用空间小,我希望每帧将y值更改5的对象与其他每个具有将y值更改5的对象的节点中的对象相同。我想要每个节点都引用相同的对象。
我尝试通过将这些对象的构造函数设置为private并使用一种方法来返回该对象(如果参数是唯一的,或者返回一个在创建过程中具有相同参数的现有对象的方法。)>
当我为每个要防止具有相同对象的类提供一个LinkedList时,我已经成功完成了。这是一个看起来像的例子:
private class NodeEndTime : NodeEnd { //attributes private readonly int dayTime; //constructor private NodeEndTime(int dayTime) { this.dayTime = dayTime; } //methods (only the one relevant for the question) public static NodeEndTime Constructor(int dayTime, LinkedList<NodeEndTime> list) { foreach (NodeEndTime node in list) { if (node.dayTime == dayTime) return node; } NodeEndTime fresh = new NodeEndTime(dayTime); list.AddLast(fresh); return fresh; } }
我对此不满意的是,我需要每个类都有唯一的LinkedList。我想要的是所有对象的列表。但是我不知道该怎么做。一个想法是拥有一个唯一列表列表,该列表在运行时将所需列表创建为属性(如果尚不存在),并完成自动访问正确列表的工作。但是我也不知道该怎么做。
这里有什么干净的解决方案?我怀疑仿制药会有所帮助,但我对它们的经验不足,无法找到适合他们的方法。我还需要注意,这些列表仅在加载过程中存在。创建的对象以NPC可用的不同结构存在。因此,将它们包括在类中不是一个选择。除非我可以在加载后以某种方式删除它们。
对于游戏,我正在创建许多确定NPC例程的不可变对象。一个节点对象更改x和z的值,一个对象更改y的值,一个对象更改角度,依此类推。我有一个...
为此,您需要一个带有私有构造函数的类,该类可以创建某种密钥来唯一标识对象。然后可以将其存储在Dictionary中,并在每次尝试创建新实例时进行查询。如果已经存在具有相同键的实例,则返回该实例,否则创建一个新实例并将其添加到字典中。通过这样的操作,您调用Get
,将获得现有副本或新实例。