今日の目標
JavaのSingletonパターンとはどういったものなのかを知る
使うもの
ではスタート
はじめに
まずはおなじみWikipediaでSingletonを調べてみる。
Singleton パターン(シングルトン・パターン)とは、GoF(Gang of Four; 4人のギャングたち)によって定義されたデザインパターンの1つである。Singleton パターンを用いると、そのクラスのインスタンスが1つしか生成されないことを保証することができる。 ロケールやLook&Feelなど、絶対にアプリケーション全体で統一しなければならない仕組みの実装に使用される。
たまに見かけるパターンですね。
インスタンスを外部から生成できないようにし、お呼ばれしたときに必ず同じインスタンスを返す(インスタンスを1つだけ生成する)ようなパターンをSingletonパターンと言うみたいです。
本のサンプルを参考にしてみる
package single;
public class Singleton {
private static Singleton instance = new Singleton();
private Singleton() {
System.out.println("シングルトンインスタンスを生成");
}
public static Singleton getInstance() {
return instance;
}
}
package single;
public class Main {
public static void main(String[] args) {
// TODO 自動生成されたメソッド・スタブ
Singleton singleton1 = Singleton.getInstance();
Singleton singleton2 = Singleton.getInstance();
if(singleton1==singleton2) {
System.out.println("インスタンスが同じです");
} else {
System.out.println("インスタンスが異なります");
}
}
}
これだけです。
Singletonクラスのコンストラクタはprivateなので、Singletonクラスの中でしかnewができないようになっています。また、ほかのクラスに渡すinstanceはstaticとして定義しています。まあ、これだと確かに1つしかinstanceが生成されないですね。
ちなみにmainの結果はこれ。
シングルトンインスタンスを生成
インスタンスが同じです
singleton1、singleton2は同じインスタンスということがわかります。
newをしようとすると、エラーになります。もちろん。
インスタンスの数を管理したい!制限したい!という場合には、Singletonパターンを使うんですね。具体的に使うところはあまり見えないですが、こういったパターンがある、ということを覚えておけばいざというときにきっと役に立つ。