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

資訊專欄INFORMATION COLUMN

Javascript 設(shè)計(jì)模式 -- Singleton(單例)模式

李濤 / 2069人閱讀

摘要:從經(jīng)典意義上來說模式,在該實(shí)例不存在的情況下,可以通過一個(gè)方法創(chuàng)建一個(gè)類來實(shí)現(xiàn)創(chuàng)建類的新實(shí)例如果實(shí)例已經(jīng)存在,它會(huì)簡單返回該對象的引用。模式的適用性描述如下當(dāng)類只能有一個(gè)實(shí)例而且客戶可以從一個(gè)眾所周知的訪問點(diǎn)訪問它時(shí)。

從經(jīng)典意義上來說

Singleton模式,在該實(shí)例不存在的情況下,可以通過一個(gè)方法創(chuàng)建一個(gè)類來實(shí)現(xiàn)創(chuàng)建類的新實(shí)例;如果實(shí)例已經(jīng)存在,它會(huì)簡單返回該對象的引用。Singleton不同于靜態(tài)類,因?yàn)槲覀兛梢酝七t他們的初始化。

var mySingleton = (function() {

    var instance;

    function init() {

        function privateMethod() {
            console.log("i am private");
        }

        var privateVariable = "i am also private";

        var privateRandomNumber = Math.random();

        return {
            publickMethod: function () {
                console.log("the public can see me");
            },

            publicProperty: "i am also public",

            getRandomNumber: function () {
                return privateRandomNumber;
            }
        };
    };

    return {
        getInstance: function() {
            if (!instance) {
                instance = init();
            }
            return instance;
        }
    };
}) ();

var myBadSingleton = (function() {
    var instance;
    function init() {
        var privateRandomNumber = Math.random();
        return {
            getRandomNumber: function() {
                return privateRandomNumber;
            }
        };
    };
    return {
        getInstance: function() {
            instance = init();
            return instance;
        }
    };
})();

var singleA = mySingleton.getInstance();
var singleB = mySingleton.getInstance();
console.log(singleA.getRandomNumber());
console.log(singleB.getRandomNumber());
console.log(singleA.getRandomNumber() === singleB.getRandomNumber());            // true

console.log("
");

var badSingleA = myBadSingleton.getInstance();
var badSingleB = myBadSingleton.getInstance();
console.log(badSingleA.getRandomNumber());
console.log(badSingleB.getRandomNumber());
console.log(badSingleA.getRandomNumber() === badSingleB.getRandomNumber());      // false

Singleton模式的適用性描述如下:
1、當(dāng)類只能有一個(gè)實(shí)例而且客戶可以從一個(gè)眾所周知的訪問點(diǎn)訪問它時(shí)。
2、該唯一的實(shí)例應(yīng)該是通過子類化可擴(kuò)展的,并且客戶應(yīng)該無需要改代碼就能使用一個(gè)擴(kuò)展的實(shí)例。

在實(shí)踐中
var SingletonTester = (function() {
    function Singleton( options ) {
        options = options || { };
        this.name = "SingletonTester";
        this.pointX = options.pointX || 6;
        this.pointY = options.pointY || 10;
    }
    var instance;
    var _static = {
        name: "SingletonTester",
        getInstance: function ( options ) {
            console.log(instance + "
");
            if ( instance === undefined ) {
                instance = new Singleton( options );
            }
            return instance;
        }
    };
    return _static;
})();

var test1 = SingletonTester.getInstance({pointX: 15});
console.log(test1);

console.log("
");

var test2 = SingletonTester.getInstance({pointX: 7});
console.log(test2);

結(jié)果如圖:

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

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

相關(guān)文章

  • JavaScript設(shè)計(jì)模式----單例模式

    摘要:不符合設(shè)計(jì)模式中的單一職責(zé)的概念。引入代理實(shí)現(xiàn)單例模式引入代理實(shí)現(xiàn)單例模式的特點(diǎn)我們負(fù)責(zé)管理單例的邏輯移到了代理類中。的單例模式對比在以上的代碼中實(shí)現(xiàn)的單例模式都混入了傳統(tǒng)面向?qū)ο笳Z言的特點(diǎn)。 聲明:這個(gè)系列為閱讀《JavaScript設(shè)計(jì)模式與開發(fā)實(shí)踐》 ----曾探@著一書的讀書筆記 1.單例模式的特點(diǎn)和定義 保證一個(gè)類僅有一個(gè)實(shí)例,并且提供一個(gè)訪問它的全局訪問點(diǎn)。 2.傳統(tǒng)面向?qū)?..

    selfimpr 評論0 收藏0
  • JavaScript 設(shè)計(jì)模式(一):單例模式

    摘要:停更許久,近期計(jì)劃更新設(shè)計(jì)模式系列。單例模式是創(chuàng)建型設(shè)計(jì)模式的一種。雖然它不是正規(guī)的單例模式,但不可否認(rèn)確實(shí)具備類單例模式的特點(diǎn)。適用場景單例模式的特點(diǎn),意圖解決維護(hù)一個(gè)全局實(shí)例對象。 停更許久,近期計(jì)劃更新:設(shè)計(jì)模式系列。 showImg(https://segmentfault.com/img/bVbt7uw?w=800&h=600); 單例模式:限制類實(shí)例化次數(shù)只能一次,一個(gè)類只...

    xialong 評論0 收藏0
  • 設(shè)計(jì)模式: 從ES5 到 TypeScript ——單例模式

    摘要:現(xiàn)在讓我們設(shè)置溫度值并將其增加減少幾次小結(jié)在中,單例模式根據(jù)是否懶漢模式餓漢模式以及是否線程安全,分為很多種實(shí)現(xiàn)方式。參考設(shè)計(jì)模式與開發(fā)實(shí)踐設(shè)計(jì)模式 Back in 1994, a book was authored by Erich Gamma, Richard Helm, Ralph Johnson and John Vlissides that discusses 23 desg...

    王軍 評論0 收藏0
  • JavaScript 單例模式

    摘要:實(shí)現(xiàn)代碼如下創(chuàng)建元素設(shè)置樣式我們發(fā)現(xiàn)在開發(fā)中并不會(huì)單獨(dú)使用遮罩層,遮罩層和彈出窗是經(jīng)常結(jié)合在一起使用,前面我們提到過登陸彈窗使用單例模式實(shí)現(xiàn)也是最適合的。 定義 確保一個(gè)類僅有一個(gè)實(shí)例,并提供一個(gè)訪問它的全局訪問點(diǎn)。 單例模式使用的場景 比如線程池、全局緩存等。我們所熟知的瀏覽器的window對象就是一個(gè)單例,在JavaScript開發(fā)中,對于這種只需要一個(gè)的對象,我們的實(shí)現(xiàn)往往使用單...

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

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

    Airy 評論0 收藏0
  • 再遇設(shè)計(jì)模式JavaScript

    摘要:在面向?qū)ο蟮恼Z言中,比如,等,單例模式通常是定義類時(shí)將構(gòu)造函數(shù)設(shè)為,保證對象不能在外部被出來,同時(shí)給類定義一個(gè)靜態(tài)的方法,用來獲取或者創(chuàng)建這個(gè)唯一的實(shí)例。 萬事開頭難,作為正經(jīng)歷菜鳥賽季的前端player,已經(jīng)忘記第一次告訴自己要寫一些東西出來是多久以的事情了。。。如果,你也和我一樣,那就像我一樣,從現(xiàn)在開始,從看到這篇文章開始,打開電腦,敲下你的第一篇文章(或者任何形式的文字)吧。 ...

    Clect 評論0 收藏0

發(fā)表評論

0條評論

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