避免带有图案的吸气剂链

时间:2014-04-25 15:11:21

标签: java design-patterns law-of-demeter

我正在制作游戏,你必须要保卫一座城堡。 每个级别都由车道组成,敌人进来并攻击它。 现在,城堡对于每个级别都是相同的,如果它在级别1中被破坏,它将在第2级“生成”具有相同的健康点。所以我所做的就是在游戏开始时创建一个城堡对象并将其保留在游戏的其余部分。

以下是澄清我的“设计”的插图:

enter image description here

现在,当敌人到达城堡并损坏它时,我的代码看起来像这样:

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

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

(我知道有关于将吸气剂链接到那里的问题,以及: https://stackoverflow.com/questions/8744668/java-getter-chaining-bad-or-good 但它并没有真正提出解决方案)

1 个答案:

答案 0 :(得分: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类,

等等。