今回はリビーリングモジュールパターンを紹介します。
リビーリングモジュールパターン
このパターンはクリスチャン・ヘイルマンという人による、モジュールパターンを改良したパターンです。
全ての関数と変数をプライベートスコープ内で定義し、パブリックメンバとして公開したいプライベートメンバへのポインタを持つ無名オブジェクトを返します。
var myRevealingModule = function() {
var privateVar = 'Hoge',
publicVar = 'Foo';
function privateFunction() {
console.log('Name:' + privateVar);
}
function publicSetName(strName) {
privateName = strName;
}
function publicGetName() {
privateFunction();
}
// プライベートな関数やプロパティへのポインタを公開する
return {
setName: publicSetName,
greeting: publicVar,
getName: publicGetName
};
};
myRevealingModule.setName('Bar');
このパターンでは、プライベートな関数やプロパティに固有の命名体型による名前をつけて外部に公開することも出来ます。
var myRevealingModule = function() {
var privateCounter = 0;
function privateFunction() {
privateCounter++;
}
function publicFunction() {
publicIncrement();
}
function publicIncrement() {
privateFunction();
}
function publicGetCount() {
return privateCounter;
}
// プライベートな関数やプロパティへのポインタを公開する。
return {
start: publicFunction,
increment: publicIncrement,
count: publicGetCount
};
};
var module = myRevealingModule();
module.start();
console.log(module.count());
利点
このパターンによりプログラムの構文は一貫します。また、どの関数や変数にパブリックにアクセス可能にするかをモジュールの終わりの部分で指定しやすくなり、可読性が向上します。
[aside type=”boader”]
「ステップアップのためのJavaScriptデザインパターン入門」記事一覧
- 第1回:デザインパターンとは
- 第2回:コンストラクタパターン
- 第3回:モジュールパターン
- 第4回:リビーリングモジュールパターン
- 第5回:シングルトンパターン
[/aside]