摘要:從經(jīng)典意義上來說模式,在該實例不存在的情況下,可以通過一個方法創(chuàng)建一個類來實現(xiàn)創(chuàng)建類的新實例如果實例已經(jīng)存在,它會簡單返回該對象的引用。模式的適用性描述如下當(dāng)類只能有一個實例而且客戶可以從一個眾所周知的訪問點訪問它時。
從經(jīng)典意義上來說
Singleton模式,在該實例不存在的情況下,可以通過一個方法創(chuàng)建一個類來實現(xiàn)創(chuàng)建類的新實例;如果實例已經(jīng)存在,它會簡單返回該對象的引用。Singleton不同于靜態(tài)類,因為我們可以推遲他們的初始化。
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)類只能有一個實例而且客戶可以從一個眾所周知的訪問點訪問它時。
2、該唯一的實例應(yīng)該是通過子類化可擴展的,并且客戶應(yīng)該無需要改代碼就能使用一個擴展的實例。
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://specialneedsforspecialkids.com/yun/85437.html
摘要:不符合設(shè)計模式中的單一職責(zé)的概念。引入代理實現(xiàn)單例模式引入代理實現(xiàn)單例模式的特點我們負責(zé)管理單例的邏輯移到了代理類中。的單例模式對比在以上的代碼中實現(xiàn)的單例模式都混入了傳統(tǒng)面向?qū)ο笳Z言的特點。 聲明:這個系列為閱讀《JavaScript設(shè)計模式與開發(fā)實踐》 ----曾探@著一書的讀書筆記 1.單例模式的特點和定義 保證一個類僅有一個實例,并且提供一個訪問它的全局訪問點。 2.傳統(tǒng)面向?qū)?..
摘要:停更許久,近期計劃更新設(shè)計模式系列。單例模式是創(chuàng)建型設(shè)計模式的一種。雖然它不是正規(guī)的單例模式,但不可否認確實具備類單例模式的特點。適用場景單例模式的特點,意圖解決維護一個全局實例對象。 停更許久,近期計劃更新:設(shè)計模式系列。 showImg(https://segmentfault.com/img/bVbt7uw?w=800&h=600); 單例模式:限制類實例化次數(shù)只能一次,一個類只...
摘要:現(xiàn)在讓我們設(shè)置溫度值并將其增加減少幾次小結(jié)在中,單例模式根據(jù)是否懶漢模式餓漢模式以及是否線程安全,分為很多種實現(xiàn)方式。參考設(shè)計模式與開發(fā)實踐設(shè)計模式 Back in 1994, a book was authored by Erich Gamma, Richard Helm, Ralph Johnson and John Vlissides that discusses 23 desg...
摘要:實現(xiàn)代碼如下創(chuàng)建元素設(shè)置樣式我們發(fā)現(xiàn)在開發(fā)中并不會單獨使用遮罩層,遮罩層和彈出窗是經(jīng)常結(jié)合在一起使用,前面我們提到過登陸彈窗使用單例模式實現(xiàn)也是最適合的。 定義 確保一個類僅有一個實例,并提供一個訪問它的全局訪問點。 單例模式使用的場景 比如線程池、全局緩存等。我們所熟知的瀏覽器的window對象就是一個單例,在JavaScript開發(fā)中,對于這種只需要一個的對象,我們的實現(xiàn)往往使用單...
摘要:本系列為設(shè)計模式與開發(fā)實踐作者曾探學(xué)習(xí)總結(jié),如想深入了解,請支持作者原版單例模式實現(xiàn)單例模式單例模式的定義是保證一個類僅有一個實例,并提供一個訪問它的全局訪問點。 本系列為《JavaScript設(shè)計模式與開發(fā)實踐》(作者:曾探)學(xué)習(xí)總結(jié),如想深入了解,請支持作者原版 單例模式 實現(xiàn)單例模式 單例模式的定義是:保證一個類僅有一個實例,并提供一個訪問它的全局訪問點。單例模式是一種常用的模式...
摘要:在面向?qū)ο蟮恼Z言中,比如,等,單例模式通常是定義類時將構(gòu)造函數(shù)設(shè)為,保證對象不能在外部被出來,同時給類定義一個靜態(tài)的方法,用來獲取或者創(chuàng)建這個唯一的實例。 萬事開頭難,作為正經(jīng)歷菜鳥賽季的前端player,已經(jīng)忘記第一次告訴自己要寫一些東西出來是多久以的事情了。。。如果,你也和我一樣,那就像我一樣,從現(xiàn)在開始,從看到這篇文章開始,打開電腦,敲下你的第一篇文章(或者任何形式的文字)吧。 ...
閱讀 1180·2021-11-22 13:54
閱讀 2428·2021-09-22 15:36
閱讀 2735·2019-08-30 15:54
閱讀 802·2019-08-30 15:53
閱讀 3168·2019-08-30 15:53
閱讀 515·2019-08-29 15:21
閱讀 2862·2019-08-28 18:28
閱讀 3004·2019-08-26 13:37