我目前正在制作一款游戏,您必须捍卫一座城堡。
每个关卡都是由敌人闯入并攻击它的车道组成的。
现在,城堡在每个级别都是相同的,如果它在1级受到损坏,它将在2级以相同的生命值“生成”。所以我所做的就是在游戏开始时创建一个城堡对象,并在游戏的其余部分中保留该对象。

这是阐明我的“设计”的例证:



现在,当敌人到达城堡并对其进行破坏时,我的代码如下所示:

this.getLane().getLevel().getGame().getCastle().doDamage(1);


看起来真的不是很好。我一直在寻找一些设计模式来提出一种更清洁的解决方案,但是我并没有真正找到一个解决方案,并且想知道是否有人对此有想法。

(我知道这里也存在关于将吸气剂链接起来的问题:
https://stackoverflow.com/questions/8744668/java-getter-chaining-bad-or-good
但实际上并没有提出解决方案)

最佳答案

一种转换方式:

this.getLane().getLevel().getGame().getCastle().doDamage(1);


对此:

this.doDamage(1);


将为Game,Level和Lane类编写一个doDamage方法。如果您的通话数量有限,这将起作用。

Game类方法如下所示:

public void doDamage(int damage) {
    getCastle().doDamage(damage);
}


对于Level和Lane类,依此类推。

09-13 12:34