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';
        };
    })()
原文地址:https://www.cnblogs.com/gaosirs/p/10736483.html