このようなオブジェクトを宣言するのは悪いことですか
public static GUI g = new GUI();
または、複数のメソッドで同じオブジェクトを使用できるようにする場合は、パブリックオブジェクトの作成を避ける必要がありますか?
はい、オブジェクトを public static 変数として公開することは一般的に悪いことです。誰もがオブジェクトへの書き込みアクセス権を持っているからです。変数final
を作成すると少し良くなりますが、最良の解決策は変数を作成private
し、静的ゲッターを提供することです。
このコンセプトは「シングルトン」モデルと呼ばれるようになりました。Java では、Objective-C などの他の言語ほど一般的ではありません。これは誰もが批判する概念ですが、通常は何らかの形で偽装されていますが、誰もが使用しています。
一般に、グローバル データの大きな問題は、データを適切に分割してそのアドレス指定可能性を管理する方法を理解するよりも簡単なため、グローバルにする必要がない、またはグローバルにする必要のないデータがあまりにも多くグローバルになることです。これにより、アプリケーションの知的複雑さが指数関数的に増大し、すぐに制御不能になる可能性があります。
final
そのため、いくつかの適切なケースでグローバルな静的 (かどうかにかかわらず) を使用しても問題はありません。危険なのは、すべての場合にそれを使用する習慣に陥ること、または少なくともアプリケーションを理解できなくなるほど多くの場合に使用することです。これは、複数の開発者がいる環境では 2 倍 (または 4 倍) になります。
静的な状態は、一般的にテスト不可能であり、悪いと見なされます。すべての静的オブジェクトは、テストしようとしているすべてのものへの暗黙的な入力であり、テストはすべて、入力を制御し、正確なパラメーターに応じてメソッドがどのように動作するかを実験することです。
代わりに、GUI オブジェクトへの明示的な参照を、それを必要とするすべてのクラスに渡す必要があります。関連する簿記を簡素化する方法はいくつかあります。通常、依存性注入が含まれます。
あなたが達成しようとしていることを行う典型的なパターンはSingletonです