單例模式

Q:何為單例
A:保證一個(gè)類(lèi)僅有一個(gè)實(shí)例,并提供一個(gè)訪(fǎng)問(wèn)它的全局訪(fǎng)問(wèn)點(diǎn)

給一個(gè)顯式表達(dá)的例子

//Singelation有個(gè)getinstance方法,調(diào)用一次此方法跟調(diào)用第二次得到相同的實(shí)例
var Singelation = function(name){
    this.name = name;
    this.instance = null;
}
Singelation.getInstance = function(name){
    return this.instance || (this.instance = new Singelation(name))
}
var a = Singelation.getInstance("a");
var b = Singelation.getInstance("b");
console.log(a === b);

普通的一個(gè)單例(閉包實(shí)現(xiàn))

var Singelation = (function(name){
    var instance = null;
    return {
        getInstance : function(){
            return instance || (instance = 1); //此處的1是假象的實(shí)例,我認(rèn)為這個(gè)實(shí)例可以是任意值
        }
    } 
})();
var a = Singelation.getInstance();
var b = Singelation.getInstance();
console.log(a == b);

用單例做個(gè)登錄框,假設(shè)一個(gè)頁(yè)面只有一個(gè)登錄框

var singelatonLogin = function(fn){
    var instance  = null;
    return function(){
        if(!instance){
            var div = document.createElement("div"); //假裝這是一個(gè)登錄框
            div.innerHTML = "登錄框";
            document.body.prepend(div);
            instance = div;
        }
        return instance;
    }
}
var loginDiv = singelatonLogin();

上面的例子是可以實(shí)現(xiàn)登錄框的單例運(yùn)用,但是我能不能把單例方法做成一個(gè)載體,供其他類(lèi)似需求去用呢

var singelaton = function(fn){
    var instance  = null;
    return function(){
        return instance || (instance = fn.apply(this, arguments))
    }
}
function loginDiv(html){
    var div = document.createElement("div"); //假裝這是一個(gè)登錄框
    div.style.display = 'none';
    document.body.prepend(div);
    return div;
}
//這里可以造一個(gè)登錄框單例,同樣可以造一個(gè)toast單例
var loginSingelaton = singelaton(loginDiv);
var loginDiv = loginSingelaton();

暢想:程序設(shè)計(jì)模式不是目的,解決實(shí)際的工作需求才是最終方向,單例模式可以返回的實(shí)例類(lèi)型可以很多,不要為了單例而單例,這過(guò)程中也可以做點(diǎn)別的。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容