定义:
保证一个对象(类)仅有一个实例,并提供一个访问它的全局访问点; 实现原理:利用闭包来保持对一个局部变量的引用,这个变量保存着首次创建的唯一的实例; 主要用于:全局缓存、登录浮窗等只需要唯一一个实例的时候;一. 为一个非单例模式对象(如:Demo)实现单例模式的方法:
给Demo添加一个静态方法来实现单例:用法:
非单例模式:var a = new Demo('Peter'); 单例模式:通过代理类来实现单例:
用法:
非单例模式:var a = new Demo('Peter'); 单例模式:var b = new ProxyDemo('Peter');二. 惰性单例模式:只在需要的时候才创建该单例;
以下是通用惰性单例的创建方法:用法:
添加其它登录元素
...
document.body.appendChild(frag.appendChild(div));
return div;
}
var createSingleLoginLayer = getSingle(createLoginLayer);
//当用户第一次点击按钮(id = 'lgBtn')时,来创建并显示登录窗口,之后重复点击按钮不会重复创建;
document.getElementById('lgBtn').onclick = function(){
var lg = createSingleLoginLayer();
lg.style.display = 'block';
}
附:缓存函数的计算结果,如计算一个数的数列 以下是不缓存的写法,非常慢!
以下是缓存写法,基本瞬间出结果!
更好的写法: