Javaでゲームを書いています。次のようなものを持つのは悪い習慣ですか
public class Constants
{
public static Mouse mouse;
public static Keyboard keyboard;
}
(マウスとキーボードは入力を返すオブジェクトです)
それとも、これらのフィールドを持つオブジェクトを、それらを必要とするオブジェクトに渡したほうがよいでしょうか?
ありがとう。
シングルトンパターンはあなたが求めているものです。
Bill Pugh セクションのソリューションに特に注意してください。これは、Java 言語仕様を利用してスレッド セーフにする、スレッド セーフな遅延初期化シングルトンの非常にクリーンな実装です。
シングルトン パターンは、単体テストをほとんど不可能にするため、現在一般的に嫌われています。通常、これはGuiceやSpringなどの依存性注入フレームワークを介して行われます。
アプリケーションを実行している場所に応じて、多くの場合、シングルトンを格納できるある種の「コンテキスト」があります。たとえば、ServletContext
Web アプリケーションなどです。これにより、両方の長所が得られます。
通常は、これらをオブジェクトに入れるか、少なくとも getter と setter を提供することをお勧めします。その理由は、複数のスレッドからオブジェクトに直接アクセスしているときに、同時実行の問題が発生することがよくあるからです (これは、グラフィックスとインターフェイスでよく発生します)。したがって、アクセスしているオブジェクトがスレッドセーフであることがわかっていない限り、論理的な方法で並行性を自分で処理することをお勧めします。
あなたは大丈夫なはずです。Constants クラスのオブジェクトを外部ソースから変更する場合は、Constants を static として宣言する必要があることに注意してください。ただし、オブジェクトの場所がスレッドセーフであることを確認してください。多くの人がここに派手な用語を投稿するでしょうが、あなたが持っているものは問題ないはずです.
また、 Singleton Design Patternにも慣れることができます。ギャング・オブ・フォーによる有名なデザイン・パターンは、一般的なプログラミングの問題に対する解決策として高く評価されています。ウィキペディアかグーグルで調べてください。