JS_單例模式

JS_單例模式

  • 什么是單例模式?

保證一個類僅有一個實例,并提供一個訪問它的全局訪問點。

  • 單例模式的優(yōu)點
  1. 可以用來劃分命名空間,減少全局變量的數(shù)量。
  2. 使用單體模式可以使代碼組織的更為一致,使代碼容易閱讀和維護。
  3. 可以被實例化,且實例化一次。
  • 主要思想

無非是用一個變量來標(biāo)志當(dāng)前是否已經(jīng)為某個類創(chuàng)建過對象,如果是,則在下一次獲取該類的實例時,直接返回之前創(chuàng)建的對象。

接下來我們用JavaScript來強行實現(xiàn)這個思路,請看代碼:

  • 版本一
class Box {
    a = 1;
    constructor() {

    }
    static getInstance() {
        return Box._instance || (Box._instance = new Box());
    }
}
var b = Box.getInstance();
var b1 = Box.getInstance();
console.log(b === b1);//true
//Box._instance = 10;//缺點:雖然實現(xiàn)了,但是能夠被修改
console.log(Box._instance);//打印10  Box._instance被暴露了
  • 版本二
class Box {
    a = 1;
    constructor() {

    }
    static getInstance() {
        if (!Box._instance) {
            Object.defineProperty(Box, "_instance", { value: new Box() });
        }
        return Box._instance;
    }
}
var b = Box.getInstance();
var b1 = Box.getInstance();
console.log(b === b1);//true
Box._instance = 10; //Box {a: 1}
console.log(Box._instance);//
  • 版本三
class Box {
    a = 1;
    constructor() {

    }
    play() {
        console.log("aaa");
    }

    static get instance() {
        if (!Box._instance) {
            Object.defineProperty(Box, "_instance", { value: new Box() });
        }
        return Box._instance;
    }
}
Box.instance.play();//aaa
//通過設(shè)置get屬性,只能讀,不能寫

只需要生成一個唯一對象的時候,比如說頁面登錄框,只可能有一個登錄框,那么你就可以用單例的思想去實現(xiàn)他;

當(dāng)然你不用單例的思想實現(xiàn)也行,那帶來的結(jié)果可能就是你每次要顯示登陸框的時候都要重新生成一個登錄框并顯示(耗費性能),或者是不小心顯示出了兩個登錄框(等著吃項目經(jīng)理的40米長刀吧)

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

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

  • 為何要有單例模式書中有舉出一個實際場景,當(dāng)我們點擊登陸按鈕時,頁面中可能會出現(xiàn)一個彈框,而這個彈框是唯一的,無論點...
    流動碼文閱讀 631評論 1 1
  • 前端開發(fā)工程師必備系列-幾個簡單的JS單例模式 JavaScript單例模式 1. 單例模式 單例模式(Singl...
    WEB開發(fā)李家靖閱讀 626評論 1 0
  • 1. 常見實現(xiàn)單例 要實現(xiàn)一個標(biāo)準(zhǔn)的單例模式并不復(fù)雜,無非是用一個變量來標(biāo)志當(dāng)前是否已經(jīng)為某個類創(chuàng)建過對象,如果是...
    rocneal閱讀 1,341評論 0 0
  • 單例模式 在面向?qū)ο笳Z言中,調(diào)用一個類的方法之前,必須先將這個類實例化,才能調(diào)用類方法。 單例模式能使得我們不需要...
    謝大見閱讀 11,922評論 0 0
  • 1.使用閉包2.閉包中判斷實例是否已存在,若存在直接返回,否則new新實例 應(yīng)用場景:只需要生成一個唯一對象的時候...
    GGatsby閱讀 194評論 0 0

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