javascript 设计模式1----单例模式

定义:保证一个类仅有一个实例,并提供一个访问的全局接口:

就是收:当我们 var a = new a(); var a1 = new a()是;a与a1是相等的。怎么实现呢,就是第一次实例化。第二不在实例,只是返回第一次的实例化:

附上通用的惰性单例思路:

Singleton.getInstance = (function () {
    var instance = null;
    return function (name) {
        if( !instance){
            instance = new Singleton(name);
        }
        return instance;
    }
})()

  一个书上的登录框的例子:

var createLoginLayer = (function () {
    var div;
    return function () {
        if(!div){
            div = document.createElement('div');
            div.innerHTML = '我是登录';
            div.style.display = 'none';
            document.body.appendChild(div);
        }
        return div;
    }
})()

    document.getElementById('div1').onclick = function () {
        var loginLayer = createLoginLayer();
        loginLayer.style.display = 'block';
    }

通用的惰性单例:

var getSingle = function (fn) {
    var result;
    return function () {
        return result || (result = fn.apply( this,arguments));
    }
}
var createLoginLayer = function () {
    var div = document.createElement('div');
    div.innerHTML = 'WOSHI DENGLU';
    div.style.display = 'none';
    document.body.appendChild(div);
    return div;
}

var createSingleLoginLayer = getSingle(createLoginLayer);

    document.getElementById('div1').onclick = function () {
        var loginLayer = createSingleLoginLayer();
        loginLayer.style.display = 'block';
    }
    //在创建一个唯一的iframe

    var createSingleframe = getSingle(function () {
        var iframe = document.createElement('iframe');
        document.body.appendChild(iframe);
        return iframe;
    })

    document.getElementById('div1').onclick = function () {
        var loginLayer = createSingleframe();
        loginLayer.src = 'http://baidu.com'
    }

 

posted @ 2016-09-12 23:00  快乐~  阅读(199)  评论(0编辑  收藏  举报