(メソッドを介して)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