灏天阁

一个人的寂寞 - 单例模式

· Yin灏

单例模式:是只允许实例化一次的对象类。有时我们也用一个对象来规划一个命名空间,井井有条地管理对象上的属性与方法。

命名空间的管理员

var Ming = {
  g: function (id) {
    return document.getElementById(id);
  },
  css: function (id, key, value) {
    this.g(id).style[key] = value;
  },
  // ...
};

模块分明

baidu.dom.addClass; // 添加元素类
baidu.dom.append; // 插入元素
baidu.event.stopPropagation; // 阻止冒泡
baidu.event.preventDefault; // 阻止默认行为
baidu.event.trim; // 去除字符串首尾空白字符
baidu.string.encodeHTML; // 将字符串进行 html 编码

创建一个小型代码库

var A = {
  Util: {
    // 公用模块
    util_method1: function () {},
    util_method2: function () {},
    // ...
  },
  Tool: {
    // 工具模块
    tool_method1: function () {},
    tool_method2: function () {},
    // ...
  },
  Ajax: {
    // ajax 模块
    get: function () {},
    post: function () {},
    // ...
  },
  Other: {
    // 其他模块
    // ...
  },
  // ...
};

// 使用
A.Util.util_method2();
A.Tool.tool_method2();
A.Ajax.get();

无法修改的静态变量

var Conf = (function () {
  // 私有变量
  var conf = {
    MAX_NUM: 100,
    MIN_NUM: 1,
    COUNT: 1000,
  };
  return {
    // 取值器方法
    get: function (name) {
      return conf[name] ? conf[name] : null;
    },
  };
})();

var count = Conf.get("COUNT");
console.log(count); // 1000

惰性单例

有些时候对于单例对象需要延迟创建,

// 惰性载入单例
var LazySingle = (function () {
  // 单例实例引用
  var _instance = null;
  // 单例
  function Single() {
    // 这里定义私有属性和方法
    return {
      publicMethod: function () {},
      publicProperty: "1.0",
    };
  }
  // 获取单例对象接口
  return function () {
    if (!_instance) {
      _instance = Single();
    }
    return _instance;
  };
})();

console.log(LazySingle().publicProperty); // 1.0

- Book Lists -