我的“代理”对象包含大量数据,包括图形、物理,现在还有 ai。
我以前在单独的对象中编码这些“代理”的组件,这些对象是并行的。现在我意识到,由于代理包含在可调整大小的 ArrayList 中,如果其中一个代理被销毁,索引将不再与 ai 组件平行。
说实话,agent类已经有10页长了,把ai方法和数据包含在一个单独的对象中是很明智的。当然,这样做的一个问题是方法将以某种方式“复制”,因为我不需要一个 AI 对象来接受和处理来自许多代理的数据,而是每个代理对象都需要一个 AI 对象。
我曾经问过这个问题,并被告知拥有多个方法实例对性能或内存膨胀没有影响,所以这应该不是问题。
我不确定如何解决这个问题,除了可能将 agent_id 存储在 agent 对象和 ai 对象中,然后在需要调用它们时在每个列表上运行搜索。不用说,这是在性能方面做事的糟糕方式。
在 C++ 中,这个问题的简单解决方案是指针,其中指向正确 ai 实例的指针将包含在代理数据中。我不知道该怎么做,所以我最好的解决方案是将更多数据塞进代理对象中,并将其作为参数传递给 ai 对象。
有没有更好的方法来解决这个“并行不匹配”问题。
编辑>>>
我知道我可以把所有的数据塞进代理类。我被教导的是,有一个 30 页的课程是糟糕的 oop 结构的一个例子。
我的问题是,如何创建 /reference/ 来存储在代理类中,同时将所有 AI 数据封装在 AI 模块中。
编辑>>示例
public class Agent{
//pseudo code that represents what I need (yes the class declaration order is wrong)
AI_ref = new Reference(ai_module);
Graphics_ref = new Reference(graphics_module);
int[][] physics_data; //Like I said, 10 pages of this
void method1(){}
void method2(){}
//....
}
public class graphics_module{
int[][] graphics_data; //this is also about 10 pages
void method1(){}
void method2(){}
//....
}
public class ai_module{
int[][] ai_data; //this will likely span 5ish pages
void method1(){}
void method2(){}
//....
}
}