我是一名网络开发人员(游戏开发作为一种爱好),我已经看到自己多次使用以下范例。(无论是在开发服务器架构还是在视频游戏开发工作中。)它看起来真的很丑,但我不知道有什么解决方法。我将在游戏开发中举一个例子,因为这是我最近注意到的地方。这是我一直在制作的RPG。每次发起战斗时,CombatEngine 都会创建两个战斗方。每个 Combatant 都会设置一个与给定 Combatant 相关联的人工智能对象,该对象负责为未收到明确命令的玩家指示动作:
public class Combatant {
ArtificialIntelligence ai = null;
public Combatant()
{
// Set other fields here.
this.ai = new ArtificialIntelligence(this);
}
}
这是我不喜欢的:内部字段(ArtificialIntelligence)在构建过程中需要一个 Combatant,因为它需要一些 Combatant 字段来指示适当的操作。因此,为方便起见,我保留了对作为 arg 传递给ArtificialIntelligence 对象的战斗员的引用,但该对象包含对ai 对象本身的引用!它创建了这种奇怪的递归,但我不知道如何解决它。AI 对象需要大量特定于战斗人员的字段,这就是为什么我传入整个对象的原因,但我不喜欢对象如何包含对包含在上层战斗人员中的 ai 字段的引用字段,包含在上层 ai 类中。这是不好的做法,还是我只是想多了?