JAva単一状態を実現する3つの方法
1584 ワード
1つ目の方法:
2つ目の方法:
第3の方法:列挙で実現し、java 1.5以降のバージョンでのみ使用できます.
3つの方法の比較:
第1の方法の利点は,非常に直感的でpublicの静的ドメインがSingletonクラスが単一状態であることを明確に示すことである.
第2の方法の利点は、静的ファクトリメソッドが柔軟性を維持し、ファクトリメソッド内でコードを柔軟に変更することができ、例えば、このメソッドを呼び出すスレッドごとに一意のインスタンスを返すことができ、さらには一意のインスタンスを返さないように変更することができることである.
第3の方法は、より簡潔であり、列挙タイプはSingletonクラスの一意性を保証し、列挙クラスのベースクラスEnumがSerializableインタフェースを実現するため、シーケンス化機能も提供する.
そこでJoshua Blochは3つ目の使用を推奨し、effective javaに書いた.
“a single-element enum type is the best way to implement a singleton”.
public class Singleton
{
public static final Singleton INSTANCE = new Singleton();
private Singleton()
{
//do something
}
public void otherMethod()
{
//do something
}
}
2つ目の方法:
public class Singleton
{
private static final Singleton INSTANCE = new Singleton();
private Singleton()
{
//do something
}
public static Singleton getInstance()
{
return INSTANCE;
}
public void otherMethod()
{
//do something
}
}
第3の方法:列挙で実現し、java 1.5以降のバージョンでのみ使用できます.
public enum Singleton
{
INSTANCE;
public void otherMethod()
{
//do something
}
}
3つの方法の比較:
第1の方法の利点は,非常に直感的でpublicの静的ドメインがSingletonクラスが単一状態であることを明確に示すことである.
第2の方法の利点は、静的ファクトリメソッドが柔軟性を維持し、ファクトリメソッド内でコードを柔軟に変更することができ、例えば、このメソッドを呼び出すスレッドごとに一意のインスタンスを返すことができ、さらには一意のインスタンスを返さないように変更することができることである.
第3の方法は、より簡潔であり、列挙タイプはSingletonクラスの一意性を保証し、列挙クラスのベースクラスEnumがSerializableインタフェースを実現するため、シーケンス化機能も提供する.
そこでJoshua Blochは3つ目の使用を推奨し、effective javaに書いた.
“a single-element enum type is the best way to implement a singleton”.