灏天阁

单例模式

· 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 编码

/**
 * 创建一个小型代码库
 * 比如有一个 A 库,包含公用模块、工具模块、ajax模块、其他模块
 */
var A = {
  Util: {
    util_method1: function () {},
    util_method2: function () {},
    //...
  },
  Tool: {
    tool_method1: function () {},
    tool_method2: function () {},
    //...
  },
  Ajax: {
    get: function () {},
    post: function () {},
    //...
  },
  Others: {
    //...
  },
  //...
};
// 使用
A.Util.util_method1();
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 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 -