シングルトンとは
OOPの代表的なデザインパターンの一つで、
- インスタンスが一つしか作られないようなクラスを作成する
- その唯一のインスタンスに対するグローバルなアクセスポイントを提供する
というもの。
例えばHuman
っていうクラスがあったとして、それに対して$takeshi
や$hanako
といったインスタンスを複数作るのではなく、$human
っていうインスタンスを一つだけ作らせるようすr
シングルトンのメリット
なんでそんなことをするのかというと、以下のようなメリットがあるため
- アプリケーションのウィンドウのように一つしか存在してはいけないものが複数生成されるのを防ぐことができる
- インスタンスが一つしか作られないので、メモリ消費量を節約できる(ロガーなど全アプリケーションで使用するがいちいちインスタンス化する必要が無いもの)
- 設定値などを一つのインスタンスのプロパティに貯めておける(ランタイム中はその設定値をどこからでも利用できる)
- 複数スレッドを使用するアプリケーションで複数スレッドの処理を一元管理できる
シングルトンの埋め込み方法
一般的には以下の方法で埋め込まれる
- インスタンスを保持するプライベート変数を定義
- ファクトリーメソッド(下記コードの
getInstance()
)を作成し、上記のプライベート変数にインスタンスがセットされていなければ新しいインスタンスを作成し、存在する場合はそのインスタンスを返却する
class Singleton {
private static Singleton instance;
private Singleton() {
...
}
public static synchronized Singleton getInstance(){
if (instance == null)
instance = new Singleton();
return instance;
}
...
public void doSomething()
{
...
}
}
// 呼び出し例
Singleton.getInstance().doSomething();