JavaScriptデザインパターン:The Module Pattern
JavaScriptの勉強にすごく役に立つので、JavaScriptを勉強したい人にはお勧めです。
※The Module Patternサンプルソース
var nameSpace = nameSpace || {};
var nameSpace.someModule = nameSpace.someModule || (function(){
  // private attributes
  var privateVar = 5;
  // private methods
  var privateMethod = function(){
     return 'Private Test';
  };
  return {
    // public attributes
    publicVar: 10,
    // public methods
    publicMethod: function(){
      return ' Followed By Public Test ';
    },
    // let's access the private members
    getData: function(){
      return privateMethod() + this.publicMethod() + privateVar;
    }
  }
})(); //the parens here cause the anonymous function to execute and return
nameSpace.someModule.getData();
※The Revealing Module Patternサンプルソース
 var nameSpace = nameSpace || {};
 var nameSpace.myRevealingModule = nameSpace.myRevealingModule || (function(){
    var name = 'John Smith';
    var age = 40;
    function updatePerson(){
      name = 'John Smith Updated';
    }
    function setPerson () {
       name = 'John Smith Set';
    }
    function getPerson () {
       return name;
    }
    return {
        set: setPerson,
        get: getPerson
    };
}());
// Sample usage:
nameSpace.myRevealingModule.get();
勉強・分析・まとめ:
クロージャと即時関数の概念及びThe Singleton Patternを理解したら、The Module Patternも理解しやすくなりますね。Functionの中にFunction及び変数を定義することにより、Javaのprivateを真似できます。Functionの中のFunction(内部Function)がその外側のFunction(外部Function)の中に定義しているFunctionを参照できることを利用して、外部に公開したいFunctionをオブジェクトの中に入れて、Returnしたら、外部に公開できるようになります。The Revealing Module PatternはJavaのクラスの定義にちょっと似ていますね。
上記2つのサンプルソースを見比べたら、やはり下のThe Revealing Module Patternサンプルソースはお勧めです。なぜならば、The Module PatternサンプルソースではpublicVarをそのまま外部に公開したので、モジュールを使用した外部のソースではnameSpace.someModule.publicVar = "value";の形で値を設定したり、var param = nameSpace.someModule.publicVar;で値を取得したりすることになります。これだと後日publicVarの変数名をpublicVar2に変更したら、外部でそのモジュールを使用するソースも修正しなくてはいけなくなります。これは好ましくないことです、それでThe Revealing Module Patternサンプルソースのようにフィールドから値を取り出して返すメソッドGetter(ゲッター)とフィールドに値を入れるメソッド「Setter」(セッター)を通して外部に公開することでこの問題を解決できます。