Javascriptのシングルトン

昨日で今年のバイトも終わりでした。会社の大掃除などして余った時間で考えてたけど、結構難しい。
結局は以下のサイトを参考にしました。↓
JavaScriptのデザインパターン - Singleton
SingletonをMixinする関数

Javaと比較してみます。

  • Javaシングルトン


class Singleton(){
private static instance = new Singleton();

public static Singleton getInstance(){
return instance;
}
}

    • 使用例


Singleton obj =Singleton.getInstance();

インスタンスをprivateフィールドに入れてただ一つのオブジェクト(シングルトン)を保障します。


var singleton = function(SomeClass){
var NewClass = function(){
throw new Error("This is Singleton-Pattern Class. Use self.getInstance().");
};
NewClass.__instance__ = null;
NewClass.getInstance = function(){
if (this.__instance__ === null)
this.__instance__ = applyNew(SomeClass, arguments);
return this.__instance__;
};
function applyNew(cls, args){
var Tmp = function(){};
Tmp.prototype = cls.prototype;
var instance = new Tmp;
cls.apply(instance, args || []);
return instance;
};
return NewClass;
};

    • 使用例


var Person = function(name, age){
this._name = name;
this._age = age;
};
Person.prototype = {
getName: function(){return this._name},
getAge: function(){return this._age}
};

Person = singleton();
var p1 = Person.getInstance();

シングルトンにしたいクラス(関数)内でオブジェクトをカプセル化するのではなくて、singleton関数にシングルトンにしたいクラス(関数)を渡して、クラスの生成と判定をしてシングルトンを保障しているっぽい。

増補改訂版Java言語で学ぶデザインパターン入門

増補改訂版Java言語で学ぶデザインパターン入門