设计模式之单例模式

haiweilian2021-01-10前端JavaScriptDesignPattern

定义

保证一个类仅有一个实例,并提供一个访问它的全局访问点。

实现

实现的方法为先判断实例是否存在,如果存在则直接返回,如果不存在就创建了再返回,这就确保了一个类只有一个实例对象。

应用

后续返回同样的值

function getSingle() {
  let result;
  return function (name) {
    return result || (result = name);
  };
}

let single = getSingle();
console.log(single("嘻嘻")); // 嘻嘻
console.log(single("哈哈")); // 嘻嘻
console.log(single("嘤嘤")); // 嘻嘻

登录浮框的例子

如当我们点击登录按钮的时候,页面中出现一个登录浮框。而这个登录框是唯一的,无论点击多少次按钮,这个浮框只会出现一次。那我们一开始就创建好不也是一样的吗。那如果不点击,那不就造成浪费了吗。这种当需要的时候再创建,也叫惰性单例。

// 把单例的逻辑抽离出来
function getSingle(fn) {
  let result;
  return function () {
    return result || (result = fn.apply(this, arguments));
  };
}

// 登录浮框的逻辑
function createLoginLayer() {
  console.log("...登录浮框,只会初始化一次");
  let div = document.createElement("div");
  div.innerHTML = "我是登录浮框";
  div.style.display = "none";
  document.body.appendChild(div);
  return div;
}

// 事件处理
let createSingleLoginLayer = getSingle(createLoginLayer);
let loginBtn = document.getElementById("loginBtn");
loginBtn.addEventListener("click", function () {
  let loginLayer = createSingleLoginLayer();
  loginLayer.style.display = "block";
});
最后更新时间 11/8/2023, 10:03:21 AM
ON THIS PAGE