一, 定义
保证一个类仅有一个实例,并提供一个访问它的全局访问点.
二, 实现方式
实现一个管理单例的方法.如下, getSingle. 保证单例的唯一性.
const getSingle=(fn)=>{
let result;
return function(){
return result || (result =fn.apply(this, arguements));
}
}
使用 getSingle 得到一个获取单例对象的方法. 如下. 比如页面只允许创建一个layer div.
const createLayer = (html)=>{
const div = document.createElement('div');
div.innerHTML = html;
document.body.appendChild(div);
return div;
}
const createSingleLayer = getSingle(createLayer);
const layer = createSingleLayer('layer');
const layer1 = createSingleLayer('layer1');
console.log(layer === layer1); // true
三, 总结
创建对象(如createLayer)和管理单例对象的职责(如 getSingle)分布在两个不同的方法中,这两个方法组合起来才具有单例模式的威力