1.1 JavaScript設(shè)計(jì)模式與開發(fā)實(shí)戰(zhàn) 之 單例模式

????????今天是2018/07/02, 今天繼續(xù)帶大家走進(jìn) js 底層的設(shè)計(jì)模式 , 作為一個(gè)web工程師,我想次面試,都

會問道? html 蝇更、js 、css 宛逗、這些基本的知識點(diǎn),很少問到他的設(shè)計(jì)模式,

1. 單例模式

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

????????單例模式是接近傳統(tǒng)面向?qū)ο笳Z言中的實(shí)現(xiàn),要實(shí)現(xiàn)一個(gè)標(biāo)準(zhǔn)的單例模式并不復(fù)雜替蔬,無非是用一個(gè)變量

來標(biāo)志當(dāng)前是否已經(jīng)為某個(gè)類創(chuàng)建過對象告私,如果是,則在下一次獲取該類的實(shí)例時(shí)承桥,直接返回之前創(chuàng)建的對象

單例對象從“類”中創(chuàng)建而來驻粟。在以類為中心的語言中,這是很自然的做法凶异。但是JavaScript 其實(shí)是一門動態(tài)類型蜀撑、

弱類型、基于原型的語言剩彬,javascript 是沒有 類? 和 接口 定義的.

示例如下:

var Singleton = function( name ){

????????this.name = name;

????????this.instance = null;

};

Singleton.prototype.getName = function(){

????????alert ( this.name );

};

Singleton.getInstance = function( name ){

????????if ( !this.instance ){

????????this.instance = new Singleton( name );

????}

????return this.instance;

};

var a = Singleton.getInstance( 'sven1' );

var b = Singleton.getInstance( 'sven2' );

alert ( a === b ); // true

或者是

var Singleton = function( name ){

? ? this.name = name;

};

Singleton.prototype.getName = function(){

????????alert ( this.name );

};

Singleton.getInstance = (function(){var instance = null;

return function( name ){

????if ( !instance ){

????????instance = new Singleton( name );

????}

return instance;

}

})();

這種方式相對比較簡單.

在 JavaScript 開發(fā)中酷麦,我們經(jīng)常會把全局變量當(dāng)成單例來使用。例如:

?var a = {};

但是 全局變量 不是單例模式;當(dāng)用這種方式創(chuàng)建對象 a 時(shí)喉恋,對象 a 確實(shí)是獨(dú)一無二的沃饶。如果 a 變量被聲明在

全局作用域下,則我們可以在代碼中的任何位置使用這個(gè)變量轻黑,全局變量提供給全局訪問是理所當(dāng)然的糊肤。

但是全局變量存在很多問題,它很容易造成命名空間污染氓鄙。在大中型項(xiàng)目中馆揉,如果不加以限制和管理,

程序中可能存在很多這樣的變量玖详。JavaScript 中的變量也很容易被不小心覆蓋把介,相信每個(gè) JavaScript 程序員

都曾經(jīng)歷過變量沖突的痛苦,就像上面的對象 var a = {};蟋座,隨時(shí)有可能被別人覆蓋拗踢。解決方案如下

1. 使用命名空間適當(dāng)?shù)厥褂妹臻g,并不會杜絕全局變量向臀,但可以減少全局變量的數(shù)量巢墅。

最簡單的方法依然是用對象字面量的方式:

var namespace1 = {

????????a: function(){

????????????alert (1);????????

? ? ? ? },

? ? ? ? b: function(){

????????????alert (2);

????????}

};

2. 使用閉包封裝私有變量

var user = (function(){

????var __name = 'sven',//私有變量

????????__age = 29;//私有變量

return {

????????getUserInfo: function(){

????????return __name + '-' + __age;

????????}

}

})();

單例模式是一種簡單但非常實(shí)用的模式,在合適的時(shí)候才創(chuàng)建對象券膀,并且只創(chuàng)建唯一的一個(gè)君纫。

點(diǎn)擊查看下一篇?: 策略模式和迭代器模式.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市芹彬,隨后出現(xiàn)的幾起案子蓄髓,更是在濱河造成了極大的恐慌,老刑警劉巖舒帮,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件会喝,死亡現(xiàn)場離奇詭異陡叠,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)肢执,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進(jìn)店門枉阵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人预茄,你說我怎么就攤上這事兴溜。” “怎么了耻陕?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵拙徽,是天一觀的道長。 經(jīng)常有香客問我淮蜈,道長斋攀,這世上最難降的妖魔是什么已卷? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任梧田,我火速辦了婚禮,結(jié)果婚禮上侧蘸,老公的妹妹穿的比我還像新娘裁眯。我一直安慰自己,他們只是感情好讳癌,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布穿稳。 她就那樣靜靜地躺著,像睡著了一般晌坤。 火紅的嫁衣襯著肌膚如雪逢艘。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天骤菠,我揣著相機(jī)與錄音它改,去河邊找鬼。 笑死商乎,一個(gè)胖子當(dāng)著我的面吹牛央拖,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播鹉戚,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼鲜戒,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了抹凳?” 一聲冷哼從身側(cè)響起遏餐,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎赢底,沒想到半個(gè)月后失都,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蔗牡,經(jīng)...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年嗅剖,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了辩越。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,566評論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡信粮,死狀恐怖黔攒,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情强缘,我是刑警寧澤督惰,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站旅掂,受9級特大地震影響赏胚,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜商虐,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一觉阅、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧秘车,春花似錦典勇、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至眯亦,卻和暖如春伤溉,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背妻率。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工乱顾, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人舌涨。 一個(gè)月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓糯耍,卻偏偏與公主長得像,于是被迫代替她去往敵國和親囊嘉。 傳聞我的和親對象是個(gè)殘疾皇子温技,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評論 2 348

推薦閱讀更多精彩內(nèi)容