Javaのシングルトン(Singleton)のサンプルです。
目次
シングルトン | シングルトンとは |
シングルトンのサンプル |
シングルトン(Singleton)とは
- あるクラスのインスタンスを1つしか作成しないデザインパターンのことです。
- 再度インスタンスを呼ぶメソッドを実行した場合、1つめのインスタンスが返ります。
- コンストラクタのアクセス修飾子をprivateにして外部からnewできないようにします。
- クラスがロードされた初回に一度だけインスタンスが生成されます。
- 生成したインスタンスは、アクセス修飾子がprivateのstatic変数に保存します。
- インスタンスの取得はstaticメソッドから行います。
- GOFによって定義されたデザインパターンの1つです。
- 以下は、WikipediaのSingletonパターンのリンクです。
https://ja.wikipedia.org/wiki/Singleton_%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3
シングルトンのサンプル
シングルトンのサンプルです。
package test1;
class Class1 {
private static Class1 c1 = new Class1();
private Class1() {
}
public static Class1 getInstance() {
return c1;
}
}
public class Test1 {
public static void main(String[] args) {
Class1 c1 = Class1.getInstance();
Class1 c2 = Class1.getInstance();
if (c1 == c2) {
System.out.println("同じ"); //同じ
}
}
// コンパイルエラー "コンストラクタClass1()は不可視です"
//Class1 c3 = new Class1();
}
クラスの生成
private static Class1 c1 = new Class1();
5行目は、privateの変数です。外部から参照できません。static修飾子があるのでインスタンスではなくクラスと紐づきます。
コンストラクタ
private Class1() {
}
7行目は、コンストラクタです。privateになっているので外部からnewできません。
インスタンスを返すメソッド
public static Class1 getInstance() {
return c1;
}
10~12行目は、5行目のインスタンスを返すメソッドです。
staticメソッドになっているのでインスタンスを生成せずにこのメソッドを利用できます。
インスタンスを返すstaticメソッドなのでstaticファクトリメソッドとも呼ばれます。
インスタンスを取得する
Class1 c1 = Class1.getInstance();
Class1 c2 = Class1.getInstance();
18行目は、10行目のメソッドを呼び出します。その時に5行目でインスタンスが生成されそのインスタンスが返ります。
19行目も、10行目のメソッドを呼び出しますが、18行目のメソッド実行時に生成されたインスタンスが返ります。
インスタンスの比較
if (c1 == c2) {
System.out.println("同じ"); //同じ
}
}
21行目は、インスタンス同士の比較をしています。同じなのでtrueになります。
インスタンスの生成
// コンパイルエラー "コンストラクタClass1()は不可視です"
//Class1 c3 = new Class1();
26行目は、newでインスタンスの生成を行おうとしますが、7行目のコンストラクタがprivateのためコンパイルエラーになります。
関連の記事
Java入門 クラスの仕組みとサンプル
Java コンストラクタのサンプル
Java クラスで使われる用語のまとめ(メンバー変数等)
Java インターフェースのサンプル(interface)
Java 抽象クラスと抽象メソッドのサンプル(abstract)
Java ポリモーフィズムのサンプル(多態性)
Java staticメソッド/変数 (newしないで使用できる)