单例模式是一种简单而非常实用的模式特别是惰性单例技术,下面例子贴出了单列模式的代码
<button id="loginBtn">登录</button>
<script>
// 通用单例模式
let getSingle = function(fn) {
let result;
return function() {
return result || (result = fn.apply(this, arguments));
};
};
let createLoginLayer = function() {
let div = document.createElement("div");
div.innerHTML = "我是登陆浮窗";
div.style.display = "none";
return div;
};
let createSingleLoginLayer = getSingle(createLoginLayer);
document.getElementById("loginBtn").onclick = function() {
let loginLayer = createSingleLoginLayer();
loginLayer.style = "block";
};
// 创建唯一的 iframe
let createSingIframe = getSingle(function() {
let iframe = document.createElement("iframe");
document.body.appendChild(iframe);
return iframe;
});
document.getElementById("loginBtn").onclick = function() {
let loginLayer = createSingIframe();
loginLayer.src = "http://baidu.com";
};
在这个例子中,我们把创建实例对象的职责和管理单例的职责分别放置在两个方法中,这两个方法可以独立的变化而相互不影响。 当它们连接在一起的时候, 就完成了创建唯一实例对象的功能。
该资料来源曾探著的《设计模式与开发实践》