クラスのオブジェクトを1つだけ作成し、同じオブジェクトを何度も再利用したいと思います。これを行うための効率的な方法はありますか?
これどうやってするの?
public final class MySingleton {
private static volatile MySingleton instance;
private MySingleton() {
// TODO: Initialize
// ...
}
/**
* Get the only instance of this class.
*
* @return the single instance.
*/
public static MySingleton getInstance() {
if (instance == null) {
synchronized (MySingleton.class) {
if (instance == null) {
instance = new MySingleton();
}
}
}
return instance;
}
}
これは通常、Singleton パターンで実装されますが、実際に必要になる状況は非常にまれであり、これは無害な決定ではありません。
決定を下す前に、代替ソリューションを検討する必要があります。
静的変数が悪になり得る理由に関するこの他の投稿も興味深い読み物です (シングルトンは静的変数です)。
1 つのインスタンスを持つクラスを作成する最も簡単な方法は、enum
public enum Singleton {
INSTANCE
}
これをSteve Taylorの回答と比較して、代替案よりもどれほど単純かを確認できます.
ところで:ステートレスシングルトンを使用することをお勧めします。ステートフルなシングルトンが必要な場合は、依存性注入を使用することをお勧めします。
それがシングルトン パターンです。基本的には、プライベート コンストラクターでの構築を防ぎ、単一のインスタンスを作成する静的同期ゲッターでインスタンスを「取得」します (まだ存在しない場合)。
乾杯、
シングルトンと呼ばれるデザインパターンがあります。それを実行すれば、必要なものが得られます。
これを見て、それを実装するさまざまな方法を確認してください。
はい。それはシングルトンクラスと呼ばれます。唯一無二のインスタンスを作成し、それをコード全体で使用します。
Singleton patternを探しています。ウィキペディアの記事を読むと、Java で実装する方法の例が見つかります。
デザイン パターンについても詳しく知りたいと思われる方は、「Head First Design Patterns」という本、またはErich Gamma 氏らによるオリジナルのデザイン パターンの本を読むことをお勧めします (前者には Java の例が記載されていますが、後者には含まれていません)。 t)
あなたが探しているのはSingleton Patternです。