JS 设计模式二 -- 单例模式
单例模式
概念
单例模式 就是保证一个类只有一个实例,并提供一个访问它的全局访问点。
实现方法
先判断实例是否存在,如果存在直接返回,如果不存在就创建实例后在返回,确保了一个类只有一个实例对象。
var Singleton = function(name) { this.name = name; }; Singleton.prototype.getName = function() { console.log(this.name); }; // 封装获取单例函数 var getSingleton = function (fn) { var result; return function () { return result || (result = fn.apply(this, arguments)); } } var createSingle = getSingleton(function(params){ var single = new Singleton(params) return single; }) createSingle("GaoSir").getName(); // GaoSir createSingle("张三").getName(); // GaoSir
!(function() { //管理单例的逻辑代码,如果没有数据则创建,有数据则返回 var getSingle = function(fn) { //参数为创建对象的方法 var result; return function() { //判断是Null或赋值 return result || (result = fn.apply(this, arguments)); }; }; //创建登录窗口方法 var createLoginLayer = function() { var div = document.createElement('div'); div.innerHTML = '我是登录浮窗'; div.className = "login"; div.style.display = 'none'; document.body.appendChild(div); return div; }; //单例方法 var createSingleLoginLayer = getSingle(createLoginLayer); //使用惰性单例,进行创建 document.getElementById('BtnShow').onclick = function() { var loginLayer = createSingleLoginLayer(); loginLayer.style.display = 'block'; }; document.getElementById('BtnHide').onclick = function() { var loginLayer = createSingleLoginLayer(); loginLayer.style.display = 'none'; }; })()