Javascriptデザインパターン-シングルトンについて

長年プログラミングをしているわりに、
ちゃんとしたデザインパターンを整理していない自分に気付きました。
初回の記事は利用頻度の高いJavascriptのデザインパターンから共有したいと思います。
デザインパターンはコードを書く上で基本と申しますか設計上の基本・基礎。
参考文献、参考リンクは記事の末尾に記載しました。

newを使ってシングルトンを作る

Javascriptでシングルトンと言うと「モジュールパターン」として使われますが、それとは別な考察(newを使ってシングルトンを作る)が参考文献のほうにはありました。
このブログではそのうちの1例を自分で書いて実行・テストし確かめてみました。

function Singleton() {

    // キャッシュするインスタンスを格納する変数
    var instance;

    // コンストラクタ書き換える関数を定義する
    Singleton = function Singleton() {
        return instance;
    }

    // プロトタイププロパティを引き継ぐ
    Singleton.prototype = this;

    // インスタンス
    instance = new Singleton();

    // コンストラクタのポインタを再定義
    instance.constructor = Singleton;

    // 機能のすべて
    instance.start_time = 0;
    instance.bang = "hoge";

    return instance;
}

// 期待値のテスト
Singleton.prototype.nothing = true;
var singleton1 = new Singleton();
Singleton.prototype.everything = true;
var singleton2 = new Singleton();

if (singleton1===singleton2) {
    // 同じものを指す
    console.log("同じインスタンス!");
}
else
{
    console.log("違うインスタンス!");
}
// プロトタイププロパティは定義された時点ですぐに機能する
console.log(singleton1.nothing);
console.log(singleton1.everything);
console.log(singleton2.nothing);
console.log(singleton2.everything);
// 通常のプロパティ
console.log(singleton1.bang); // hoge
// コンストラクタのポインタも正しいところをみる
if (singleton1.constructor === Singleton) {
    console.log("ポインタOK");
} else {
    console.log("ポインタNG");
}

テスト

上記のコードをsingleton.jsというファイル名で保存しnode.jsで実行してみる。

$ node singleton.js

実行して以下が吐かれればOK
同じインスタンス!
true
true
true
true
hoge
ポインタOK

javascriptデザインパターン-シングルトン

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です