想象有一种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()
。
我的问题
得墨忒耳法则规定,物体只能与直系亲属互动。这是否违反了原则,如何解决?
对于要动态处理的每个状态,所有可能的状态都必须接受形式参数。这使得很难严格传递对象所需的内容,这就是每个状态从“主要来源”获取所需内容的原因。我觉得主要来源的凝聚力非常低,因为 aShopState
需要的数据与 a 不同CombatState