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

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

單例模式是一種常用的模式,有一些對象我們往往只需要?jiǎng)?chuàng)建一個(gè)颠黎,比如線程池另锋,全局緩存,瀏覽器中的window對象等狭归。在JS開發(fā)中夭坪,單例模式的用途同樣非常廣泛,比如當(dāng)我們單擊一個(gè)登陸按鈕的時(shí)候过椎,頁面會(huì)浮現(xiàn)一個(gè)登陸窗口室梅,而且這個(gè)窗口是唯一的,無論點(diǎn)擊多少次登陸按鈕疚宇,這個(gè)窗口只會(huì)被創(chuàng)建一次亡鼠,那么這個(gè)窗口就適合用單例模式來創(chuàng)建。

首先我們先實(shí)現(xiàn)一個(gè)“透明”的單例類敷待,使用CreateDiv單例類间涵,它的作用是負(fù)責(zé)在頁面中創(chuàng)建唯一的DIV節(jié)點(diǎn),代碼如下:

varCreatDiv=(function(){

varinstance;

varCreateDiv=function(html){

if(instance){

returninstance

}

this.html=html;

this.init();

returninstance=this;

};

CreateDiv.prototype.innit=function(){

vardiv=document.createElement('div');

div.innerHTML=this.html;

document.body.appendChild(div);

};

returnCreateDiv;

})();

vara=newCreatDiv('Tom');

varb=newCreatDiv('Jack');

alert(a==b);//true

通過上面這個(gè)例子榜揖,我們可以能看出勾哩,單例模式的大體思想就是先判斷這個(gè)例子是否存在。轉(zhuǎn)換成代碼就是下面這個(gè)意思:

var obj;

if(!obj){

obj=xxx;

}

現(xiàn)在我們了解了一些單例模式的實(shí)現(xiàn)方法举哟,接下來我們再看惰性單例思劳。惰性單例指的是在需要的時(shí)候才創(chuàng)建對象實(shí)例,惰性單例是單例模式的重點(diǎn)妨猩。就那剛才那個(gè)登陸窗口來說潜叛,其實(shí)用戶只是單純?yōu)g覽網(wǎng)站時(shí)候,其實(shí)不需要進(jìn)行登陸册赛。按照我自己之前的開發(fā)方式钠导,就是在頁面初始化的時(shí)候就創(chuàng)建了這么一個(gè)窗口,再將它display為none森瘪。學(xué)習(xí)了單例模式后牡属,發(fā)現(xiàn)有更好的辦法,那就是惰性單例:只有當(dāng)用戶點(diǎn)擊登陸時(shí)候我才開始創(chuàng)建并顯示這個(gè)窗口扼睬,然后當(dāng)用戶多次點(diǎn)擊登陸時(shí)候逮栅,其實(shí)顯示的是同一個(gè)登陸窗口悴势。

另外,我們把創(chuàng)建實(shí)例對象的職責(zé)和管理單例的職責(zé)分別放在兩個(gè)方法里措伐,這兩個(gè)方法可以獨(dú)立變化而互不影響特纤,當(dāng)它們連接在一起的時(shí)候,就完成了創(chuàng)建唯一實(shí)例對象的功能侥加。這樣的做法體現(xiàn)了單一職責(zé)原則捧存。上代碼,哈哈

vargetSingle=function(fn){

varresult;

return function(){

returnresult||(result=fn.apply(this,arguments));

}

};

varcreateLoginLayer=function(){

vardiv=document.createElement('div');

div.innerHTML='我是登錄框';

div.style.display='none';

document.body.appendChild(div);

returndiv;

};

varcreatSingleLoginLayer=getSingle(createLoginLayer);

//假設(shè)【登陸】按鈕的id是loginBtn

document.getElementById('loginBtn').onclick=function(){

varloginLayer=creatSingleLoginLayer();

loginLayer.style.display='none';

};

備注:以上內(nèi)容都是我自己在看《JavaScript設(shè)計(jì)模式與開發(fā)實(shí)踐》担败,自己總結(jié)里面的知識(shí)點(diǎn)昔穴,一名知識(shí)的搬運(yùn)工... 哈哈

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市提前,隨后出現(xiàn)的幾起案子吗货,更是在濱河造成了極大的恐慌,老刑警劉巖狈网,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件宙搬,死亡現(xiàn)場離奇詭異,居然都是意外死亡拓哺,警方通過查閱死者的電腦和手機(jī)勇垛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來拓售,“玉大人窥摄,你說我怎么就攤上這事〈∮伲” “怎么了?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵哨苛,是天一觀的道長鸽凶。 經(jīng)常有香客問我,道長建峭,這世上最難降的妖魔是什么玻侥? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮亿蒸,結(jié)果婚禮上凑兰,老公的妹妹穿的比我還像新娘。我一直安慰自己边锁,他們只是感情好姑食,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著茅坛,像睡著了一般音半。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天曹鸠,我揣著相機(jī)與錄音煌茬,去河邊找鬼。 笑死彻桃,一個(gè)胖子當(dāng)著我的面吹牛坛善,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播邻眷,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼浑吟,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了耗溜?” 一聲冷哼從身側(cè)響起组力,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎抖拴,沒想到半個(gè)月后燎字,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡阿宅,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年候衍,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片洒放。...
    茶點(diǎn)故事閱讀 40,424評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蛉鹿,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出往湿,到底是詐尸還是另有隱情妖异,我是刑警寧澤,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布领追,位于F島的核電站他膳,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏绒窑。R本人自食惡果不足惜棕孙,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望些膨。 院中可真熱鬧蟀俊,春花似錦、人聲如沸订雾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽葬燎。三九已至误甚,卻和暖如春缚甩,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背窑邦。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工擅威, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人冈钦。 一個(gè)月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓郊丛,卻偏偏與公主長得像,于是被迫代替她去往敵國和親瞧筛。 傳聞我的和親對象是個(gè)殘疾皇子厉熟,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,435評論 2 359

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