博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaScritp设计模式1 ----- 单件模式
阅读量:5311 次
发布时间:2019-06-14

本文共 2079 字,大约阅读时间需要 6 分钟。

1.什么是单体?

单体是一个用来划分命名空间并将一批方法和属性组织在一起的对象, 如果它可以被实例化,那么它只能被实例化一次.

2.简单的单体

最简单的单体实际上就是一个声明的对象.

var MyNameSpace = {};

MyNameSpace.Singleton = {
  publicAttr1: true,
  publicAttr2: 20,
  publicMethod1: function () {
  },
  publicMethod2: function () {
  }
};

3. 带有私有变量的单体

带有私有变量的单体需要用到闭包.

MyNameSpace.SingletonWithPrivateMem = function () {

  var privateAttr1 = 10;
  return {
    publicAttr1: true,
    publicAttr2: 20,
    publicMethod1: function () {
      // we can access privateAttr1 here
    },
    publicMethod2: function () {
      // we can access privateAttr1 here
    }
  };
}();

4.需要惰性实例化的单体

惰性实例化的单体就是使用时进行创建, 需要为这个单体增加一个getInstance()方法.

MyNameSpace.LazyCreateSingleton = function () {

  var instance = null;
  function constructor() {
    var privateAttr1 = 10;
    return {
      publicAttr1: true,
      publicAttr2: 20,
      publicMethod1: function () {
        // we can access privateAttr1 here
      },
      publicMethod2: function () {
        // we can access privateAttr1 here
      }
    };
  };

  return {

    getInstance: function () {
      if (!instance) {
        instance = constructor();
      }
      return instance;
    }
  }
}();

5.单体的应用

考虑不同的浏览器,创建XHR对象.

MyNameSpace.XhrFactory = (function () {

  var standard = {
    createXhrObject: function () {
      return new XMLHttpRequest();
    }
  };

  var activeXNew = {

    createXhrObject: function () {
      return new ActiveXObject('Msxml2.XMLHTTP');
    }
  };
  var activeXOld = {
    createXhrObject: function () {
      return new ActiveXObject('Microsoft.XMLHTTP');
    }
  };

  // branch test

  var testOjbect = null;
  try
  {
    testOjbect = standard.createXhrObject();
    return standard;
  }
  catch (e) {
    try
    {
      testObject = activeXNew.createXhrObject();
      return activeXNew;
    }
    catch (e) {
      try
      {
        testObject = activeXOld.createXhrObject();
        return activeXOld;
      }
      catch (e) {
        throw new Error("no XHR object found in this enviroment");
      }
    }
  }

})();

 

 

转载于:https://www.cnblogs.com/bsqdevspace/p/3650039.html

你可能感兴趣的文章
Vue 模板解释
查看>>
http://www.bootcss.com/
查看>>
20145308 《网络对抗》 注入shellcode+Return-to-libc攻击 学习总结
查看>>
将多张图片和文字合成一张图片
查看>>
自己动手写ORM(01):解析表达式树生成Sql碎片
查看>>
如何使用USBWebserver在本机快速建立网站测试环境
查看>>
百度Ueditor编辑器的Html模式自动替换样式的解决方法
查看>>
变量提升
查看>>
线性表可用顺序表或链表存储的优缺点
查看>>
在现有的mysql主从基础上,搭建mycat实现数据的读写分离
查看>>
[Flex] flex手机项目如何限制横竖屏?只允许横屏?
查看>>
tensorflow的graph和session
查看>>
JavaScript动画打开半透明提示层
查看>>
Mybatis生成resulteMap时的注意事项
查看>>
jquery-jqzoom 插件 用例
查看>>
1007. Maximum Subsequence Sum (25)
查看>>
iframe的父子层跨域 用了百度的postMessage()方法
查看>>
图片生成缩略图
查看>>
动态规划 例子与复杂度
查看>>
查看oracle数据库的连接数以及用户
查看>>