multiplus

気まぐれに書評とか。

シングルトンパターン

Javaのお勉強中におもしろいものを見つけたので適当に書いておきます。シングルトン(オブジェクト)パターンといい、簡単に言うとオブジェクトをひとつだけ生成することを行うデザインパターンのことのようです。

実際の挙動では、

  1. getInstance()パターンで一度だけオブジェクトを生成する
  2. 2度めの生成の際は、最初のオブジェクトだけを返す

ことによって、「オブジェクトをひとつだけ生成する」ことを実現している模様。

最近在庫管理のプログラムを作っていたけど、たしかにオブジェクトを何個も生成されるとめんどうくさそうだな…処理が重くなりそうだな…という場面がいくつかありました。シングルトンパターンはあまり多用するのはよろしくないようですけど、使えそうな場面はこれまでのプログラミング経験でもいくつかありました。

以下にコードのサンプルを示します。

public class MySingleton {
    private static MySingleton instance = new MySingleton();

    private MySingleton() {
        instance null;
    }

    public static MySingleton getInstance() {
        if (instance == null) {
            instance = new MySingleton();
        }
        return instance;
    }

    public static void main(String[] args) {
        MySingleton instance1 = MySingleton.getInstance();
        MySingleton instance2 = MySingleton.getInstance();
        System.out.println(instance1.equals(instance2));
    }
}

で、これで「true」と返ってくる、というわけ。trueということは、instance1とinstance2のオブジェクトがまったく同じものであることを示しています。(なお、普通にコンストラクタだけを作ってequalsで比べるとfalseが返ってくる。全く別物のオブジェクトを生成しているということになる。)

シングルトンパターンの手順は以下の2つ。 1. コンストラクタをprivateにする。 2. staticなgetInstanceメソッドを作る。 これに加えて、インスタンスを生成した際にnullだったら新しいオブジェクトを生成するコードを書き上げれば完成のようです。