あなたのシングルトンはATM
でなければならないので、Singleton
クラスは必要ありません。だから、
、ちょうどATM.javaでこれを使用します。
今
public class ATM {
private static ATM uniqueInstance;
private ATM() {}
public static ATM getInstance() {
if (uniqueInstance == null) {
uniqueInstance = new ATM();
}
return uniqueInstance;
}
}
、あなたの行を呼び出すことができます。
あなたのコンストラクタがあるので、あなたは、ATM
クラス自体にある場合にのみ、 private
ですが、この状況ではuniqueInstance
を気にするので、これは役に立たないです。
あなたが別のクラスにある場合は、あなたが使用する必要があります。
public class Main {
public static void main(String[] args) {
ATM theATM = ATM.getInstance();
}
}
シングルトンパターンのアイデアは、あなたが再びATM.getInstance();
実行した場合でも、同じ(初期)のインスタンス(uniqueInstance
)が返されるということです。前に初期化されていない場合は、初期化されます。それ以外の場合は、古いインスタンスが返されます。だから、これはあなたが複数のインスタンスを持たないことを確信する方法です。
もちろん、スレッドセーフであるシングルトンパターンの実装が優れています。
例えば:
スレッドセーフ - 怠惰:
public class ATM {
private static ATM uniqueInstance = null;
private ATM(){}
public static synchronized ATM getInstance() {
if (uniqueInstance == null) {
uniqueInstance = new ATM();
}
return uniqueInstance;
}
}
スレッドセーフ - 熱心
public class ATM {
private static ATM uniqueInstance = new ATM();
private ATM(){}
public static ATM getInstance() {
return uniqueInstance;
}
}
スレッドセーフ - 使用して列挙
public enum ATM {
UNIQUE_INSTANCE;
...
}
@engineer - だから、このコードではなく、それ自身の個別のシングルトンクラスに比べて、ATMクラス内にあることが必要ですか? –
シングルトンは_pattern_です。これは、(スレッドセーフではなくエラーが発生しやすい)シングルトンを書くためのテンプレートです。私はこれをまったく使用せず、代わりに['enum'シングルトンパターン](http://stackoverflow.com/a/26285591/2071828)を使用します。 –