3

私は Java で非常に単純なPlayerクラスを持っています。これは、すべてインターフェイスPlayerStrategyから継承するいくつかの戦略オブジェクトを使用します。

PlayerStrategyの一部の実装は単純ですが、その他のいくつかはリソースを集中的に使用するため、戦略が使用されなくなったときにリソースを適切に解放する必要があります。これらの戦略には追加のメソッドがあります: それを処理する turnOff() です。

Player がゲームを離れた場合、必要なすべての戦略で turnOff() を呼び出したいと思います。

問題は、turnOff() を必要とする戦略はごくわずかであるため、そのメソッドをPlayerStrategyインターフェースに追加するのは気が進まないということです。
現在、プレイヤーがプレイを停止すると、その戦略にメソッド turnOff() が存在するかどうかをリフレクションによってチェックします。しかし、それは不格好で醜いです。より良い方法はありますか?

4

2 に答える 2

2
  1. 反射を避ける:反射は悪い考えです。できるところはどこでも(そしてできるように見える)、それを避けてください。

  2. インターフェイスにあるとよいturnOff(): インターフェイスturnOff()を使用する必要がある場合は、またはcleanup()メソッドを追加することをお勧めします。ほとんどのサブクラスに空の中かっこがある場合でも。クリーンアップが必要なリソースを使用するために将来更新された場合、追加の作業を行う必要はありません。

  3. あなたが望むものを手に入れることができますが、コストは高くなります:あなたが本当に厳格で、サブクラスが他のクラスを拡張しないと確信している場合. 空のメソッドとしてPlayerStrategy抽象クラスを作成できます。turnOff()これにより、両方の問題が解決されますが、サブクラスが他のクラスを拡張する機能が制限されます。

于 2012-08-11T14:07:35.247 に答える
1

PlayerStrategy の実装を変更したくない場合は、ファサード パターンを使用して turnOff を処理できます。

于 2012-08-11T14:51:38.080 に答える