大雷说单例
大雷说单例:
单例模式的定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点.
看起来真的不好理解 不仅要知道何为类 何为实例 何为访问点.
简单点说:类就是一个女朋友 实例就是把女朋友变成老婆 能够访问老婆的就只能是老公
婚姻法规定:在中国一男人只能拥有一个老婆 也只有老公能够喊老婆 这就是单例 同时拥有两个老婆叫做重婚 就不符合单例的设计模式!!!!!!
那如何来实例一个老婆呢?
现在一起来创造唯一的老婆吧
var createWife = (function () {
var wife;
return function () {
if (!wife) {
wife = document.createElement("div");
wife.innerHTML = "世界上最漂亮的老婆";
wife.style.display = "none";
document.body.appendChild(wife);
}
return wife;
}
})();
上面这个函数 在页面加载完成以后就是自动执行 返回一个wife对象
然后每次去构建老婆的时候 就会检查老婆是否存在 如果存在就不能继续创造只能使用以前的老婆
document.getElementById("btn").onclick = function () {
var wife = createWife();
wife.style.display = "block";
}
最后每次去调用该函数产生的老婆就是唯一的 页面也不会重复的去动态生成div 只会使用以前的div 老婆也就保证了唯一性;
上面的例子能够保证创造老婆的唯一性 但是生活生成中唯一的东西太多了 如何让产生老婆这种事情多样化 这个多样化不是多个老婆 而是唯一的事物 比如: 唯一的老妈 唯一的老爸 唯一的女朋友(说甜言蜜语用) 唯一的对话框
看代码的世界如何创造多样的唯一
下面的两个方法创造了唯一的夫人和唯一的母后
var createWife = function () {
var wife = document.createElement("div");
wife.innerHTML = "世界最好的老婆是艳艳熊";
wife.style.display = "none";
document.body.appendChild(wife);
return wife
}
var createMom = function () {
var mom = document.createElement("div");
mom.innerHTML = "世界上最好的老妈是香香姐";
mom.style.display = "none";
document.body.appendChild(mom);
return mom;
}
然后在专门做唯一事情的函数
var getSingle = function (fn) {
var obj;
return function () {
return obj || (obj = fn());
}
}
最后通过函数专门来实现唯一的事情 实现美满家庭
var wifeSingle = getSingle(createWife);
var monSingle = getSingle(createMom);
document.getElementById("btn").onclick = function () {
var wife = wifeSingle();
wife.style.display = "block";
var mon = monSingle();
mon.style.display = "block";
}