【发布时间】:2023-04-04 09:40:01
【问题描述】:
想象有一个GameState 类型使用GameContext(通过process 方法):
abstract class GameState {
public abstract void process(GameContext context);
}
GameContext 将包含诸如 Player、Shops 等对游戏至关重要的东西。
一个状态可以访问它需要的东西:
class CombatState extends GameState {
public void process(GameContext context) {
Player player = context.getPlayer();
if(player.isAlive()) {
//...
}
}
}
语句player.isAlive() 可以重写为context.getPlayer().isAlive()。
我的问题
得墨忒耳法则规定对象只能与直系亲属互动。这是否违反了原则,如何解决?
对于要动态处理的每个状态,所有可能的状态都必须接受形式参数。 这使得严格传递对象所需的内容变得困难,这就是每个状态从“主要来源”获取所需内容的原因。我觉得主要来源的凝聚力很低,因为ShopState 需要的数据与CombatState 不同
【问题讨论】:
标签: java getter law-of-demeter