成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

es6實(shí)現(xiàn)單例模式及其應(yīng)用

Joonas / 3471人閱讀

摘要:指向的是唯一實(shí)例化的對(duì)象返回結(jié)果是。實(shí)現(xiàn)方式創(chuàng)建類。構(gòu)造一個(gè)廣為人知的接口,供用戶對(duì)該類進(jìn)行實(shí)例化單例模式應(yīng)用實(shí)例我們用一個(gè)生活中常見的一個(gè)場(chǎng)景來說明單例模式的應(yīng)用。這就是單例模式的典型應(yīng)用。

單例模式的定義是:保證一個(gè)類僅有一個(gè)一個(gè)實(shí)例,并提供一個(gè)訪問它的全局訪問點(diǎn)。

單例模式能在合適的時(shí)候創(chuàng)建對(duì)象,并且創(chuàng)建唯一的一個(gè)。
代碼接近于生活,很有意思。比如一個(gè)網(wǎng)站的登錄,點(diǎn)擊登錄后彈出一個(gè)登錄彈框,即使再次點(diǎn)擊,也不會(huì)再出現(xiàn)一個(gè)相同的彈框。又或者一個(gè)音樂播放程序,如果用戶打開了一個(gè)音樂,又想打開一個(gè)音樂,那么之前的播放界面就會(huì)自動(dòng)關(guān)閉,切換到當(dāng)前的播放界面。這些都是單例模式的應(yīng)用場(chǎng)景。
要實(shí)現(xiàn)一個(gè)單例模式,一個(gè)經(jīng)典的方式是創(chuàng)建一個(gè)類,類中又一個(gè)方法能創(chuàng)建該類的實(shí)例對(duì)象,還有一個(gè)標(biāo)記,記錄是否已經(jīng)創(chuàng)了過了實(shí)例對(duì)象。如果對(duì)象已經(jīng)存在,就返回第一次實(shí)例化對(duì)象的引用。

單例模式的實(shí)現(xiàn) es5實(shí)現(xiàn)方式
var Singleton = function(name) {
    this.name = name;
    //一個(gè)標(biāo)記,用來判斷是否已將創(chuàng)建了該類的實(shí)例
    this.instance = null;
}
// 提供了一個(gè)靜態(tài)方法,用戶可以直接在類上調(diào)用
Singleton.getInstance = function(name) {
    // 沒有實(shí)例化的時(shí)候創(chuàng)建一個(gè)該類的實(shí)例
    if(!this.instance) {
        this.instance = new Singleton(name);
    }
    // 已經(jīng)實(shí)例化了,返回第一次實(shí)例化對(duì)象的引用
    return this.instance;
}

用戶可以通過一個(gè)廣為人知的接口,對(duì)該實(shí)例進(jìn)行訪問。
我們嘗試對(duì)該對(duì)象進(jìn)行兩次實(shí)例化,觀察兩次實(shí)例化結(jié)果是否指向同一個(gè)對(duì)象。

var a = Singleton.getInstance("sven1");
var b = Singleton.getInstance("sven2");
// 指向的是唯一實(shí)例化的對(duì)象
console.log(a === b);

返回結(jié)果是:true。說明a、b之間是引用關(guān)系。

es6實(shí)現(xiàn)方式

創(chuàng)建Singleton類。class關(guān)鍵字和靜態(tài)函數(shù)都是es6新增的。

class Singleton {
    constructor(name) {
        this.name = name;
        this.instance = null;
    }
    // 構(gòu)造一個(gè)廣為人知的接口,供用戶對(duì)該類進(jìn)行實(shí)例化
    static getInstance(name) {
        if(!this.instance) {
            this.instance = new Singleton(name);
        }
        return this.instance;
    }
}
單例模式應(yīng)用實(shí)例

我們用一個(gè)生活中常見的一個(gè)場(chǎng)景來說明單例模式的應(yīng)用。
任意一個(gè)網(wǎng)站,點(diǎn)擊登錄按鈕,只會(huì)彈出有且僅有一個(gè)登錄框,即使后面再點(diǎn)擊登錄按鈕,也不會(huì)再彈出多一個(gè)彈框。這就是單例模式的典型應(yīng)用。接下來我們實(shí)現(xiàn)它。為了注重單例模式的展示,我們把登錄框簡(jiǎn)化吧

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/90305.html

相關(guān)文章

  • ES6重新認(rèn)識(shí)JavaScript設(shè)計(jì)模式(一): 單例模式

    摘要:什么是單例模式單例模式是一種十分常用但卻相對(duì)而言比較簡(jiǎn)單的單例模式。對(duì)象就是單例模式的體現(xiàn)??偨Y(jié)單例模式雖然簡(jiǎn)單,但是在項(xiàng)目中的應(yīng)用場(chǎng)景卻是相當(dāng)多的,單例模式的核心是確保只有一個(gè)實(shí)例,并提供全局訪問。 1. 什么是單例模式? 單例模式是一種十分常用但卻相對(duì)而言比較簡(jiǎn)單的單例模式。它是指在一個(gè)類只能有一個(gè)實(shí)例,即使多次實(shí)例化該類,也只返回第一次實(shí)例化后的實(shí)例對(duì)象。單例模式不僅能減少不必要...

    G9YH 評(píng)論0 收藏0
  • JavaScript面向?qū)ο蟮某绦蛟O(shè)計(jì)

    摘要:目錄導(dǎo)語理解對(duì)象和面向?qū)ο蟮某绦蛟O(shè)計(jì)創(chuàng)建對(duì)象的方式的繼承機(jī)制原型對(duì)象原型鏈與原型對(duì)象相關(guān)的方法小結(jié)導(dǎo)語前面的系列文章,基本把的核心知識(shí)點(diǎn)的基本語法標(biāo)準(zhǔn)庫等章節(jié)講解完本章開始進(jìn)入核心知識(shí)點(diǎn)的高級(jí)部分面向?qū)ο蟮某绦蛟O(shè)計(jì),這一部分的內(nèi)容將會(huì)對(duì)對(duì)象 目錄 導(dǎo)語 1.理解對(duì)象和面向?qū)ο蟮某绦蛟O(shè)計(jì) 2.創(chuàng)建對(duì)象的方式 3.JavaScript的繼承機(jī)制 3.1 原型對(duì)象 3.2 原型鏈 3.3 與...

    gitmilk 評(píng)論0 收藏0
  • php設(shè)計(jì)模式

    摘要:我們今天也來做一個(gè)萬能遙控器設(shè)計(jì)模式適配器模式將一個(gè)類的接口轉(zhuǎn)換成客戶希望的另外一個(gè)接口。今天要介紹的仍然是創(chuàng)建型設(shè)計(jì)模式的一種建造者模式。設(shè)計(jì)模式的理論知識(shí)固然重要,但 計(jì)算機(jī)程序的思維邏輯 (54) - 剖析 Collections - 設(shè)計(jì)模式 上節(jié)我們提到,類 Collections 中大概有兩類功能,第一類是對(duì)容器接口對(duì)象進(jìn)行操作,第二類是返回一個(gè)容器接口對(duì)象,上節(jié)我們介紹了...

    Dionysus_go 評(píng)論0 收藏0
  • php設(shè)計(jì)模式

    摘要:我們今天也來做一個(gè)萬能遙控器設(shè)計(jì)模式適配器模式將一個(gè)類的接口轉(zhuǎn)換成客戶希望的另外一個(gè)接口。今天要介紹的仍然是創(chuàng)建型設(shè)計(jì)模式的一種建造者模式。設(shè)計(jì)模式的理論知識(shí)固然重要,但 計(jì)算機(jī)程序的思維邏輯 (54) - 剖析 Collections - 設(shè)計(jì)模式 上節(jié)我們提到,類 Collections 中大概有兩類功能,第一類是對(duì)容器接口對(duì)象進(jìn)行操作,第二類是返回一個(gè)容器接口對(duì)象,上節(jié)我們介紹了...

    vspiders 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<