单体模式

  • 单体(singleton)模式是javascript中最基本但又最有用的模式之一,它可能比其他任何模式都常用。
  • 这种模式提供了一种将代码组织为一个逻辑单元的手段,这个逻辑单元中的代码可以通过单一的变量进行访问。通过确保单体对象只存在一份实例,你就可以确信自己的所有代码使用的都是同样的全局资源。
  • 简单单体
  • 闭包单体
  • 惰性单体
  • 分支单体
//单体模式
      var Ext = {};

      Ext.model = {
        attr : 10,
        attr2 : 20,
        fn1 : function(){
          console.log('fn1');
        },
        fn2 : function(){
          console.log('fn2');
        }
      }

      console.log(Ext.model.attr);
      Ext.model.fn1();


      //闭包单体
      var Ext = {};
      Ext.model = (function(){
        //给自己添加私有成员
        attr = 10;
        attr2 = 20;
        var methods = function(){
          console.log('methods1');
        }
        var mothods2 = function(){
          console.log('methods2');
        }

        //把块级作用域里的执行结果复制给我的单体对象
        return {
          a1 : attr,
          a2 : attr2,
          m1 : function(){
            return methods();
          },
          m2 : function(){
            return methods2();
          }
        }
      })();

      console.log(Ext.model.a1);
      Ext.model.m1();



      //惰性单体,和闭包单体有一些相似的地方
      var Ext = {};
      Ext.model = (function(){
        //私有变量,控制返回的对象
        var result;   //undinfined

        //需要一个构造器,init初始化单体对象的方法
        function init(){
          //私有成员变量
          var attr1 = 10;
          var attr2 = 20;
          var methods1 = function(){
            console.log('methods1');
          };
          var methods2 = function(){
            console.log('methods2');
          };

          return {
            a1 : attr1,
            a2 : attr2,
            m1 : function(){
              return methods1();
            },
            m2 : function(){
              return methods2();
            }
          }
        }

        return {
          getmodel : function(){
            //如果不存在就创建单体
            if(!result){
              result = init();
            }
            return result;
          }
        }
      })();

      console.log(Ext.model.getmodel().a1);
      Ext.model.getmodel().m1();


      //分支单体 用于判断浏览器差异检测
      var Ext = {};
      var def = true;

      Ext.model = (function(){
        var objA = {
          attr1 : '火狐浏览器'
          // 属性1
					// 属性2
					// 方法1
					// 方法2
        };
        var objB = {
          attr1 : 'IE浏览器'
          // 属性1
					// 属性2
					// 方法1
					// 方法2
        }

        return (def) ? objA : objB;
      })();
      console.log(Ext.model.attr1);


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值