亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

javascript設(shè)計(jì)模式學(xué)習(xí)筆記之單例模式

xiaolinbang / 1159人閱讀

摘要:?jiǎn)卫J絾卫J骄褪潜WC一個(gè)類僅有一個(gè)實(shí)例并提供一個(gè)訪問(wèn)它的全局訪問(wèn)點(diǎn)其最大的特點(diǎn)就是永遠(yuǎn)只返回一個(gè)實(shí)例實(shí)例通過(guò)來(lái)獲取類的唯一對(duì)象其缺點(diǎn)也明顯增加了類的不透明性透明的單例模式最終會(huì)被返回使用代理實(shí)現(xiàn)單例模式將負(fù)責(zé)管理單例的邏輯移到了代理類中

單例模式

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

其最大的特點(diǎn)就是 永遠(yuǎn)只返回一個(gè)實(shí)例

    var Singleton = function (name) {
        this.name = name;
        // instance 實(shí)例
        this.instance = null;
    };

    Singleton.prototype.getName = function () {
        console.log(this.name);
    };
    
    // 通過(guò)queryInstance 來(lái)獲取 Singleton 類的唯一對(duì)象
    Singleton.queryInstance = function (name) {
        if (!this.instance) {
            this.instance = new Singleton(name)
        }
        return this.instance;
    }

    var a = Singleton.queryInstance("a");
    var b = Singleton.queryInstance("b");
    
    console.log(a);  // {name: "a", instance: null}
    console.log(b);  // {name: "a", instance: null}
    console.log(a === b);  // true

其缺點(diǎn)也明顯, 增加了 類的 不透明性

透明的單例模式
    var CreateDiv = (function () {
        var instance;
        
        // CreateDiv 最終會(huì)被返回
        var CreateDiv = function (html) {
            if (instance) {
                return instance;
            }
            this.html = html;

            this.init();

            return instance = this;
        };
        
        
        CreateDiv.prototype.init = function () {
            var div = document.createElement("div");
            div.innerHTML = this.html;
            document.body.appendChild(div);
        };

        return CreateDiv;
    })();

    var a = new CreateDiv("a");
    var b = new CreateDiv("b");

    console.log(a);
    console.log(b);
    console.log(a === b);
使用代理實(shí)現(xiàn)單例模式
    var CreateDiv = function (html) {
        this.html = html;
        this.init();
    }
    CreateDiv.prototype.init = function () {
        var div = document.createElement("div");
        div.innerHTML = this.html;
        document.body.appendChild(div);
    }
    // 將負(fù)責(zé)管理單例的邏輯移到了代理類中.
    // 這樣CreateDiv 就變成了一個(gè)普通的類
    var ProxySingletonCreateDiv = (function () {
        var instance;
        return function (html) {
            if (!instance) {
                instance = new CreateDiv(html);
            }
            return instance;
        }
    })();

    var a = new ProxySingletonCreateDiv("a");
    var b = new ProxySingletonCreateDiv("b");
惰性單例

在需要的時(shí)候才創(chuàng)建對(duì)象實(shí)例

    // 這個(gè)函數(shù)就是創(chuàng)建一個(gè) 通用的惰性單例模式
    var getSingle = function (fn) {
        var result;
        return function () {
            return result || (result = fn.apply(this, arguments))
        }
    };

    // 以下的都是實(shí)例對(duì)象的 職責(zé). 將兩種區(qū)分開(kāi)來(lái)
    var createLoginLayer = function () {
        var div = document.createElement("div");

        div.innerHTML = "我是登錄浮框";

        div.style.display = "none";

        document.body.appendChild(div);

        return div;
    };

    var createSingleLoginLayer = getSingle(createLoginLayer);

    document.getElementById("loginBtn").onclick = function () {
        var loginLayer = createSingleLoginLayer();
        loginLayer.style.display = "block";
    }

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

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

相關(guān)文章

  • 優(yōu)才公開(kāi)課筆記:php設(shè)計(jì)模式(一) 單例模式

    摘要:最近開(kāi)展了三次設(shè)計(jì)模式的公開(kāi)課,現(xiàn)在來(lái)總結(jié)一下設(shè)計(jì)模式在中的應(yīng)用,這是第一篇?jiǎng)?chuàng)建型模式之單例模式。不過(guò)因?yàn)椴恢С侄嗑€程所以不需要考慮這個(gè)問(wèn)題了。 最近開(kāi)展了三次設(shè)計(jì)模式的公開(kāi)課,現(xiàn)在來(lái)總結(jié)一下設(shè)計(jì)模式在PHP中的應(yīng)用,這是第一篇?jiǎng)?chuàng)建型模式之單例模式。 一、設(shè)計(jì)模式簡(jiǎn)介 首先我們來(lái)認(rèn)識(shí)一下什么是設(shè)計(jì)模式: 設(shè)計(jì)模式是一套被反復(fù)使用、容易被他人理解的、可靠的代碼設(shè)計(jì)經(jīng)驗(yàn)的總結(jié)。 設(shè)計(jì)模式不...

    guyan0319 評(píng)論0 收藏0
  • JavaScript設(shè)計(jì)模式單例模式

    摘要:原文博客地址單例模式系統(tǒng)中被唯一使用,一個(gè)類只有一個(gè)實(shí)例。中的單例模式利用閉包實(shí)現(xiàn)了私有變量?jī)烧呤欠裣嗟热躅愋?,沒(méi)有私有方法,使用者還是可以直接一個(gè),也會(huì)有方法分割線不是單例最簡(jiǎn)單的單例模式,就是對(duì)象。 原文博客地址:https://finget.github.io/2018/11/06/single/ 單例模式 系統(tǒng)中被唯一使用,一個(gè)類只有一個(gè)實(shí)例。實(shí)現(xiàn)方法一般是先判斷實(shí)例是否存在,...

    lk20150415 評(píng)論0 收藏0
  • JavaScript設(shè)計(jì)模式與開(kāi)發(fā)實(shí)踐系列單例模式

    摘要:本系列為設(shè)計(jì)模式與開(kāi)發(fā)實(shí)踐作者曾探學(xué)習(xí)總結(jié),如想深入了解,請(qǐng)支持作者原版單例模式實(shí)現(xiàn)單例模式單例模式的定義是保證一個(gè)類僅有一個(gè)實(shí)例,并提供一個(gè)訪問(wèn)它的全局訪問(wèn)點(diǎn)。 本系列為《JavaScript設(shè)計(jì)模式與開(kāi)發(fā)實(shí)踐》(作者:曾探)學(xué)習(xí)總結(jié),如想深入了解,請(qǐng)支持作者原版 單例模式 實(shí)現(xiàn)單例模式 單例模式的定義是:保證一個(gè)類僅有一個(gè)實(shí)例,并提供一個(gè)訪問(wèn)它的全局訪問(wèn)點(diǎn)。單例模式是一種常用的模式...

    Airy 評(píng)論0 收藏0
  • javascript設(shè)計(jì)模式與開(kāi)發(fā)實(shí)踐全書(shū)深度解析(一)單例模式

    摘要:所以程序在引入文件的時(shí)候用了單例模式,一個(gè)文件實(shí)例化一次,這種做法無(wú)疑是好的,但是也容易引起。在我們平時(shí)的開(kāi)發(fā)過(guò)程中,可以借鑒這兩種方式去緩存變量,節(jié)點(diǎn)等。 這一章作者講了一個(gè)例子,就是在用單例模式生成一個(gè)dom節(jié)點(diǎn),還要做到只有訪問(wèn)的時(shí)候才創(chuàng)建,后續(xù)訪問(wèn)直接用前面創(chuàng)建的。那么實(shí)際開(kāi)發(fā)中我們會(huì)用到這個(gè)模式嗎?現(xiàn)在我們基本都是用vue,react,angular開(kāi)發(fā),不太會(huì)直接去操作do...

    xioqua 評(píng)論0 收藏0
  • 每天一個(gè)設(shè)計(jì)模式單例模式

    摘要:博主按每天一個(gè)設(shè)計(jì)模式旨在初步領(lǐng)會(huì)設(shè)計(jì)模式的精髓,目前采用靠這吃飯和純粹喜歡兩種語(yǔ)言實(shí)現(xiàn)。單例模式用途如果一個(gè)類負(fù)責(zé)連接數(shù)據(jù)庫(kù)的線程池日志記錄邏輯等等,此時(shí)需要單例模式來(lái)保證對(duì)象不被重復(fù)創(chuàng)建,以達(dá)到降低開(kāi)銷的目的。 博主按:《每天一個(gè)設(shè)計(jì)模式》旨在初步領(lǐng)會(huì)設(shè)計(jì)模式的精髓,目前采用javascript(_靠這吃飯_)和python(_純粹喜歡_)兩種語(yǔ)言實(shí)現(xiàn)。誠(chéng)然,每種設(shè)計(jì)模式都有多種實(shí)...

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

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

0條評(píng)論

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