ホーム‎ > ‎アプリ開発教室‎ > ‎その他‎ > ‎

シングルトン

デザインパターンの中のシングルトンを実装する方法を記述します。
簡単に言うと、シングルトンとはアプリケーションの中でインスタンスを1つに限定する仕組みです。
通常のクラスをnewでインスタンス生成すると、毎回別のオブジェクトができますが、
クラスをシングルトンとすることで、インスタンスを1つに限定することができます。
 
グローバル変数(Javaでできるのか不明です)にしたり、1か所でインスタンスを生成し、パラメータで受け渡すことで、
1つのインスタンスを共有することができますが、面倒な記述になります。
 
シングルトンを使えば、どこでインスタンスを取得しても同じものを参照していることが保証できます。
ある意味、グローバル変数と同じことになるので、使い方には注意が必要ですが、簡潔にプログラムを記述することができるメリットがあります。 
 
ただし、androidアプリケーションにおいては、Activityをまたがったオブジェクトの利用は原則禁止となるので、
Activity間でシングルトンオブジェクトを利用することはできないと考えます。
これに関しては、アプリ開発雑記の「Activityのライフサイクル」を参照。

シングルトン

public class mySingleton {
    private static mySingleton instance = null;
 
    private mySingleton() {}
 
    public static mySingleton getInstance() {
        if (instance == null) {
            instance = new mySingleton();
        }
        return instance;
    }
}
 

利用する側

 
    private mySingleton obj;
 
    obj = mySingleton.getInstance();
 
シングルトンクラスのインスタンスを取得するには、getInstance()メソッドを使います。
通常のコンストラクタ(上記の例ではmySingleton()メソッド)はprivateとして宣言されているので、クラスの外からはアクセスすることはできません。privateにすることで、不用意な、ルール違反のインスタンス作成を抑止します。代わりにgetInstance()メソッドを呼び出します。
getInstance()メソッドが最初に呼び出された時、instance変数はnullなので、インスタンスを生成し、呼び出し元に返します。instance変数はstaticで宣言されているので、クラス変数となります。
2回目以降に呼び出された場合は、先ほど生成したinstance変数がnullではないので、生成済みのinstance変数を返します。
こうすることで、ただ1つのインスタンスを共有することができるようになります。
 
Comments