mai*_*elm 2 java design-patterns law-of-demeter
我正在制作一个游戏,你必须要保卫一座城堡.每个级别都由车道组成,敌人进来并攻击它.现在,城堡对于每个级别都是相同的,如果它在级别1中被破坏,它将在第2级"生成"具有相同的健康点.所以我所做的就是在游戏开始时创建一个城堡对象,并将其保留在游戏的其余部分.
这是一个说明我的"设计":

现在,当敌人到达城堡并损坏它时,我的代码如下所示:
this.getLane().getLevel().getGame().getCastle().doDamage(1);
Run Code Online (Sandbox Code Playgroud)
哪个看起来不是很好.我一直在寻找一些设计模式来提出一个更清洁的解决方案,但我并没有找到一个,并且想知道是否有人有想法.
(我知道这个问题是关于链接吸气剂的问题:https: //stackoverflow.com/questions/8744668/java-getter-chaining-bad-or-good 但它并没有真正提出解决方案)
转换它的一种方法:
this.getLane().getLevel().getGame().getCastle().doDamage(1);
Run Code Online (Sandbox Code Playgroud)
对此:
this.doDamage(1);
Run Code Online (Sandbox Code Playgroud)
就是为Game,Level和Lane类编写一个doDamage方法.如果您的链式呼叫数量有限,这将有效.
Game类方法如下所示:
public void doDamage(int damage) {
getCastle().doDamage(damage);
}
Run Code Online (Sandbox Code Playgroud)
以及Level和Lane类等等.
| 归档时间: |
|
| 查看次数: |
1043 次 |
| 最近记录: |