3

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

这是一个说明我的“设计”的插图:

在此处输入图像描述

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

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

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

(我知道还有一个关于链接 getter 的问题: https ://stackoverflow.com/questions/8744668/java-getter-chaining-bad-or-good 但它并没有真正提出解决方案)

4

1 回答 1

5

一种转换方法:

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 类以此类推。

于 2014-04-25T15:36:06.370 回答