私は約 1 時間グーグルで検索しましたが、シングルトンとは何かについてまだ明確な考えがありません。誰かが私に少し明確にして、おそらくコード例を投稿できますか?
私が知っているのは、特定のクラスのインスタンスは 1 つしか持てないということだけです。しかし、そのために静的クラスを使用することはできませんか?
前もって感謝します!
私は約 1 時間グーグルで検索しましたが、シングルトンとは何かについてまだ明確な考えがありません。誰かが私に少し明確にして、おそらくコード例を投稿できますか?
私が知っているのは、特定のクラスのインスタンスは 1 つしか持てないということだけです。しかし、そのために静的クラスを使用することはできませんか?
前もって感謝します!
単純な平易な英語の1バージョンは次のとおりです。Singleton Class は、インスタンスを 1 つだけ持つことができる Class です。
しかし、そのために静的クラスを使用することはできませんか?
いいえ、それはJavaの「静的」クラスではありません。Java の「静的」クラスは、他のクラスと同様に複数のインスタンスを持つことができます。
このstatic
キーワードは (クラスに対して) 使用され、ネストされたクラスのインスタンスが外側のクラスの特定のインスタンスに関連付けられていないことを意味します。つまり、ネストされたクラスの式は、外側のクラスで宣言されたインスタンス変数を参照できません。
Java 1.5 (別名 Java 5) より前は、Java のシングルトン設計パターンはサポートされていませんでした。それらを単純な Java で実装しただけです。例えば
/** There is only one singer and he knows only one song */
public class Singer {
private static Singer theSinger = new Singer();
private String song = "I'm just a singer";
private Singer() {
/* to prevent instantiation */
}
public static Singer getSinger() {
return theSinger;
}
public String getSong() {
return song;
}
}
Java 1.5 では、enum
シングルトンなどの実装に使用できる型が導入されました。
/** There are two Singers ... no more and no less */
public enum Singer {
DUANE("This is my song"),
RUPERT("I am a singing bear");
private String song;
Singer(String song) {
this.song = song;
}
public String getSong() {
return song;
}
}
1 - もちろん、「クラス」と「インスタンス」の意味を理解する必要があります。これらの単語のプログラミング/IT英語の意味は「平易な英語」の意味とは異なるため、これを「平易な英語」の説明と呼ぶのは無理があります. 一方、読者が「クラス」と「インスタンス」の意味をまだ理解していない場合は、「シングルトン」のアイデアを理解する、またはその要点を理解するために必要な基礎知識がありません。
singleton はプライベート コンストラクターを持つクラスであり、そのインスタンスを 1 つしか取得できませんでした。なぜこのコーディング スタイルが使用されるのかについては、この本のシングルトンに関する章をお読みになることをお勧めします。
http://www.wowebook.com/book/head-first-design-patterns/
第5章はすべてシングルトンについてです
シングルトン パターンは、クラスのインスタンス化を 1 つのオブジェクトに制限する設計パターンです。
クラスの単純な静的インスタンスとシングルトンの違いに注意してください。シングルトンは静的インスタンスとして実装できますが、必要になるまでメモリやリソースを必要とせずに遅延構築することもできます。もう 1 つの注目すべき違いは、インターフェイスが単なるマーカーでない限り、静的メンバー クラスはインターフェイスを実装できないことです。したがって、クラスがインターフェイスによって表現されるコントラクトを実現する必要がある場合、それは実際にはシングルトンでなければなりません。