長年プログラミングをしているわりに、
ちゃんとしたデザインパターンを整理していない自分に気付きました。
初回の記事は利用頻度の高い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
- 参考文献(o’REILLY):Javascriptパターン-優れたアプリケーションのための作法
