みかづきブログ その3

3ヶ月つづけてみました。

JavaScriptでシングルトンクラス的な挙動を実装する その2


JavaScriptでシングルトンクラス的な挙動を実装する - みかづきブログ その3



前回のシングルトンクラス風のクラスは超お手軽バーションだった故に、

  1. new で単一ではないインスタンスをつくれてしまう
  2. インスタンスがグローバルからアクセスできてしまう

という問題がありました。
もろもろ考えた結果、やっぱりシングルトンクラスがnewできてしまうのはまずいだろうということで、最近ではこんな感じで実装することにしてみてます。


JavaScript

// グローバルにネームスペースを切る
(function(win) {

    "use strict";

    win.App = win.App || {};

})(this);

// シングルトンクラス
(function(win, doc, ns) {

    "use strict";

    var instance;

    function SingletonClass() {
    }

    function getInstance() {
        if (!instance) {
            instance = new SingletonClass();
        }

        return instance;
    }

    ns.SingletonClass = {
        getInstance: getInstance
    };

})(this, document, App);

// メインロジック
(function(win, doc, ns) {

    "use strict";

    var singletonClass = ns.SingletonClass.getInstance();

})(this, document, App);

はい。こんな感じです。

グローバルにはgetInstanceをもったobjectを公開しているので、newしようとすると怒られます。
また、シングルトンクラス内のinstanceも隠蔽されているため、getInstanceを使わずには取り出せません。
前回よりは良くなりましたね。


今回は以上です。