シングルトンパターン(アクセス権付きで)

オブジェクトを定義する

 var Singleton = (function(){
   var instance;
 
   function init() {
     var foo     = 'FOO';
     var bar    = 'BAR';
     var getFoo  = function () { return this.foo; };
     var getBar  = function () { return bar; };
     var _getBaz = function () { return 'BAZ' };
     return {
       foo:    foo,
       getFoo: getFoo,
       getBar: getBar,
       getBaz: _getBaz
     };
   }
   return {
     getInstance: function () {
       if (!instance) {
         instance = init();
       }
       return instance;
     }
   };
 })();

オブジェクトを利用する

 var obj = Singleton.getInstance();
 console.log('DEBUG: ' + obj.getFoo());   // getFoo()は公開メソッド。
 console.log('DEBUG: ' + obj.getBar());   // getBar()も公開メソッド。
 obj.foo = 'FOO2';                        // fooはパブリックプロパティなので、
 console.log('DEBUG: ' + obj.getFoo());   // "FOO2"に変わってる。
 obj.bar = 'BAR2';                        // barはプライベートプロパティなので、
 console.log('DEBUG: ' + obj.getBar());   // "BAR"のまま。
 console.log('DEBUG: ' + obj.getBaz());   // getBaz()は内部でプライベートメソッド_getBaz()を呼んでいる。
 
 var obj2 = Singleton.getInstance();      // シングルトンなので、
 console.log('DEBUG: ' + obj2.getFoo());  // obj2のfooプロパティは"FOO2"になっている。
 obj2.foo = "FOO3";                       // obj2のfooを変えると、
 console.log('DEBUG: ' + obj.getFoo());   // objのfooは"FOO3"になっている。
 DEBUG: FOO
 DEBUG: BAR
 DEBUG: FOO2
 DEBUG: BAR
 DEBUG: BAZ
 DEBUG: FOO2
 DEBUG: FOO3

参考

http://www.addyosmani.com/resources/essentialjsdesignpatterns/book/


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS

Last-modified: 2012-01-27 (金) 17:47:55