單件設(shè)計(jì)模式

一奶是、定義

  1. 設(shè)計(jì)模式

設(shè)計(jì)模式就是一種更好的編寫代碼方案。

  1. 常見設(shè)計(jì)模式

工廠設(shè)計(jì)模式竣灌、抽象工廠設(shè)計(jì)模式聂沙、抽象工廠設(shè)計(jì)模式,抽象工廠設(shè)計(jì)模式初嘹,觀察者設(shè)計(jì)模式及汉,抓雙裝飾器模式,代理設(shè)計(jì)模式屯烦,MVC坷随,MVP房铭,MVVM 架構(gòu)設(shè)計(jì)模式。

  1. 常規(guī)定義

  2. 簡明定義:一個(gè)類對(duì)外有且僅有一個(gè)實(shí)例温眉,這種編碼方案就是單件設(shè)計(jì)模式缸匪。

  3. 完整定義(有所缺失):如果某個(gè)類對(duì)外始終只提供一個(gè)對(duì)象,并且在該類的內(nèi)部提供了一個(gè)外部訪問該對(duì)象的方法或該對(duì)象屬性类溢,那么這種編寫代碼方案就是單件設(shè)計(jì)模式凌蔬。

  4. 如果一個(gè)類的任何外部通過訪問類提供的某個(gè)方法或某個(gè)屬性始終只能獲取該類的一個(gè)對(duì)象,但如果該類提供了多個(gè)外部可以訪問的方法或?qū)傩源忱洌敲赐獠烤湍茉L問到該該類的多個(gè)不同的對(duì)象

單從實(shí)際開發(fā)來看砂心,絕大對(duì)數(shù)情況的應(yīng)用場(chǎng)景,我們對(duì)外都只提供一個(gè)唯一的可以訪問的方法或?qū)傩陨咭@樣就保證了實(shí)例為單個(gè)辩诞,類的這種編寫代碼的方案就是單件設(shè)計(jì)模式。

二蒂窒、選型

  1. 什么時(shí)候選擇單件設(shè)計(jì)模式

實(shí)際發(fā)開中躁倒,外部訪問某個(gè)類的對(duì)象時(shí),確保只能訪問該類唯一對(duì)象時(shí)才能保證邏輯的正確性時(shí)就應(yīng)該使用單件設(shè)計(jì)模式了洒琢。

  1. 實(shí)際場(chǎng)景

  • Vuex秧秉、Redux 中的全局狀態(tài)管理容器 store對(duì)象在整個(gè)項(xiàng)目被設(shè)計(jì)成唯一的對(duì)象,把store對(duì)象所在的類設(shè)計(jì)成單件設(shè)計(jì)模式將是最好的設(shè)計(jì)方案衰抑,當(dāng)然也有其他代替寫法象迎。

  • 一般前端項(xiàng)目需要進(jìn)行客戶端本地?cái)?shù)據(jù)存儲(chǔ)時(shí)都會(huì)考慮使用 localStorage, localStorage 只要在相同的協(xié)議、相同的主機(jī)名呛踊、相同的端口下砾淌,就能讀取/修改道一份 localStorage 數(shù)據(jù).

  • 項(xiàng)目日志記錄,為一個(gè)項(xiàng)目邊寫一個(gè)日志文件類谭网,用來保存日志和閱讀日志信息汪厨。

  1. 為什么不零散得寫

問題1: 代碼零散

問題2: 可讀性很差,不能顧名思義

問題3: 對(duì)后期維護(hù)產(chǎn)生影響

問題4: 方法的代碼可以直接放到類里

OOP 面向?qū)ο笏枷?/p>

[圖片上傳失敗...(image-269029-1656773555186)]

[圖片上傳失敗...(image-f1d2c-1656773555186)]

[圖片上傳失敗...(image-9d02e3-1656773555186)]

//   構(gòu)建單件設(shè)計(jì)模式
//   第一步:把構(gòu)造器設(shè)置為私有的愉择,不允許外部來創(chuàng)建類的實(shí)例【對(duì)象】
//   第二步: 至少應(yīng)該提供一個(gè)外部訪問的方法或?qū)傩越俾遥獠靠梢酝ㄟ^這個(gè)方法或?qū)傩詠淼玫揭粋€(gè)對(duì)象
//           所以應(yīng)該把這個(gè)方法設(shè)置為靜態(tài)方法
//   第三步:外部調(diào)用第二步提供的靜態(tài)方法來獲取一個(gè)對(duì)象

[圖片上傳失敗...(image-967115-1656773555186)]

設(shè)置成私有的構(gòu)造函數(shù),外部就不可以訪問啦锥涕,然后通過靜態(tài)方法進(jìn)行創(chuàng)建

[圖片上傳失敗...(image-9eb42c-1656773555186)]

[圖片上傳失敗...(image-fbc902-1656773555186)]

我們需要在調(diào)用這個(gè)函數(shù)的時(shí)候展示一個(gè)

靜態(tài)的方法不可以訪問實(shí)例屬性衷戈,所以在類里定義一個(gè)靜態(tài)屬性

[圖片上傳失敗...(image-4acfc-1656773555186)]

[圖片上傳失敗...(image-ff2434-1656773555186)]

靜態(tài)會(huì)一直存在。 靜態(tài)會(huì)限制外部訪問它层坠,只有靜態(tài)方法才能訪問靜態(tài)屬性殖妇。

  1. 靜態(tài)屬性的 9 大規(guī)則 + 靜態(tài)方法

  2. 外部如何調(diào)用 ts靜態(tài)屬性?類名直接調(diào)用靜態(tài)成員破花,格式:類名.靜態(tài)屬性 類名.靜態(tài)方法

  3. 靜態(tài)方法如何調(diào)用其他靜態(tài)成員谦趣? 用 this

  4. 靜態(tài)方法是否可以訪問類中原型對(duì)象上的方法或?qū)ο髮傩阅仄N催^來? 不能 它們是相互獨(dú)立的蔚润。

  5. 對(duì)象變量是否可以訪問靜態(tài)成員磅氨?不能

  6. 一個(gè)靜態(tài)方法改變了某個(gè)靜態(tài)屬性,其他靜態(tài)方法或類外部任何地方訪問這個(gè)屬性都會(huì)發(fā)生改變嫡纠。

靜態(tài)屬性 和 對(duì)象屬性【實(shí)例屬性】是類中的兩大成員,對(duì)象原型方法

  1. 靜態(tài)成員保存在內(nèi)存你那里延赌?合適分配的內(nèi)存空間除盏?

任何一個(gè)TS類中的靜態(tài)成員存儲(chǔ)在內(nèi)存的靜態(tài)區(qū),運(yùn)行一個(gè) TS 類挫以,TS首先會(huì)為靜態(tài)成員開辟內(nèi)存空間者蠕,靜態(tài)成員的內(nèi)存空間分配的時(shí)間要早于對(duì)象空間的分配,也就是任何一個(gè)對(duì)象創(chuàng)建之前 TS 就已經(jīng)為靜態(tài)成員分配好了空間掐松。但一個(gè)靜態(tài)方法只會(huì)分配一個(gè)空間踱侣,只要當(dāng)服務(wù)器不重啟或控制程序還沒有結(jié)束之前,靜態(tài)方法就一直存在內(nèi)存空間大磺,無論調(diào)用多少次抡句,都是調(diào)用同一塊空間。

總結(jié):

  • 無論你是否創(chuàng)建對(duì)象杠愧,創(chuàng)建多少個(gè)對(duì)象待榔,是否調(diào)用改靜態(tài)方法或靜態(tài)屬性,ts都會(huì)為這個(gè)靜態(tài)方法或靜態(tài)屬性分配內(nèi)存空間流济。

  • 一旦為靜態(tài)方法或靜態(tài)屬性分配好空間就會(huì)一直存在內(nèi)存中锐锣,直到服務(wù)器重啟或者控制臺(tái)程序執(zhí)行結(jié)束才被釋放。

任何一個(gè)TS類中的靜態(tài)成員存儲(chǔ)在內(nèi)存的靜態(tài)去

靜態(tài)方法的調(diào)用 和 對(duì)象無關(guān)绳瘟。

[圖片上傳失敗...(image-afc113-1656773555186)]

[圖片上傳失敗...(image-47c098-1656773555186)]

[圖片上傳失敗...(image-7bdc7a-1656773555186)

三雕憔、應(yīng)用·

何時(shí)應(yīng)該定義靜態(tài)方法、靜態(tài)屬性呢糖声?

[圖片上傳失敗...(image-455404-1656773555186)]

[圖片上傳失敗...(image-10c3bd-1656773555186)]

[圖片上傳失敗...(image-7a10c5-1656773555186)]

這個(gè)方法只是被類收集了起來

[圖片上傳失敗...(image-a68d71-1656773555186)]

[圖片上傳失敗...(image-72a3ed-1656773555186)]

[圖片上傳失敗...(image-25a040-1656773555186)]

餓漢單件設(shè)計(jì)模式

[圖片上傳失敗...(image-a47089-1656773555186)]

[圖片上傳失敗...(image-f1332b-1656773555186)]

四斤彼、原理

  1. 靜態(tài)方法或?qū)傩栽谠蛯?duì)象空間上的方法或?qū)傩杂惺裁磪^(qū)別?

原型對(duì)象空間上的方法和屬性是用來提供給該類的所有對(duì)象變量公用的方法或?qū)傩砸陶桑瑳]有對(duì)象和對(duì)象變量畅卓,原型上的屬性和方法就沒有了用武之地,而靜態(tài)方法或靜態(tài)屬性屬于類蟋恬,可以通過類來直接訪問翁潘。

任何一個(gè)對(duì)象創(chuàng)建之前,TS 就已經(jīng)為靜態(tài)成員分配好了空間歼争。但一個(gè)靜態(tài)方法或靜態(tài)屬性只會(huì)分配一個(gè)空間拜马,而每一個(gè)對(duì)象都有自己的獨(dú)立空間渗勘。

  1. 靜態(tài)方法內(nèi)部是否可以接受一個(gè)對(duì)象變量來作為方法的參數(shù)

[圖片上傳失敗...(image-d31c54-1656773555186)]

#繼承

一、定義

  1. 對(duì)象的 prototype 和 constructor都會(huì)指向同一個(gè)對(duì)象空間俩莽。

二旺坠、應(yīng)用

  1. 原型鏈繼承

Son.prototype = new Parent('王六', 38);

// 從指向自己的原型鏈空間到指向某一個(gè)類的原型鏈空間。

[圖片上傳失敗...(image-ce3e58-1656773555186)]

繼承之后扮超,子類變量對(duì)象可以訪問父類的實(shí)例屬性

[圖片上傳失敗...(image-4d8c32-1656773555186)]

原型鏈繼承的完整描述:子對(duì)象首先在自己的對(duì)象空間中查找要訪問的屬性和方法取刃,如果找到,就輸出出刷。如果沒找到就沿著子對(duì)象中的 proto屬性指向的原型空間中去查找有沒有這個(gè)屬性或方法璧疗。 如果找到,就輸出馁龟,如果沒有找到就繼續(xù)沿著原型對(duì)象空間中的 protp 查找上一級(jí)原型對(duì)象空間中的屬性或方法崩侠,直到找到Object.prototype 原型對(duì)象屬性指向的原型對(duì)象空間為止,如果再找不到坷檩,就輸出 null却音。

  1. 原型鏈繼承容易被遺忘的一步

[圖片上傳失敗...(image-844bd0-1656773555186)]

掛載 constructor屬性,會(huì)通過 son類的對(duì)象 或函數(shù)原型 prototype 指向原型對(duì)象空間矢炼。

選型

原理

完整案例

#類型斷言

#泛型

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末系瓢,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子裸删,更是在濱河造成了極大的恐慌八拱,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,718評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件涯塔,死亡現(xiàn)場(chǎng)離奇詭異肌稻,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)匕荸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門爹谭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人榛搔,你說我怎么就攤上這事诺凡。” “怎么了践惑?”我有些...
    開封第一講書人閱讀 158,207評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵腹泌,是天一觀的道長。 經(jīng)常有香客問我尔觉,道長凉袱,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,755評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮专甩,結(jié)果婚禮上钟鸵,老公的妹妹穿的比我還像新娘。我一直安慰自己涤躲,他們只是感情好棺耍,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著种樱,像睡著了一般蒙袍。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上缸托,一...
    開封第一講書人閱讀 50,050評(píng)論 1 291
  • 那天左敌,我揣著相機(jī)與錄音,去河邊找鬼俐镐。 笑死,一個(gè)胖子當(dāng)著我的面吹牛哺哼,可吹牛的內(nèi)容都是我干的佩抹。 我是一名探鬼主播,決...
    沈念sama閱讀 39,136評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼取董,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼棍苹!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起茵汰,我...
    開封第一講書人閱讀 37,882評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤枢里,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后蹂午,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體栏豺,經(jīng)...
    沈念sama閱讀 44,330評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評(píng)論 2 327
  • 正文 我和宋清朗相戀三年豆胸,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了奥洼。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,789評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡晚胡,死狀恐怖灵奖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情估盘,我是刑警寧澤瓷患,帶...
    沈念sama閱讀 34,477評(píng)論 4 333
  • 正文 年R本政府宣布,位于F島的核電站遣妥,受9級(jí)特大地震影響擅编,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜燥透,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評(píng)論 3 317
  • 文/蒙蒙 一沙咏、第九天 我趴在偏房一處隱蔽的房頂上張望辨图。 院中可真熱鬧,春花似錦肢藐、人聲如沸故河。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鱼的。三九已至,卻和暖如春痘煤,著一層夾襖步出監(jiān)牢的瞬間凑阶,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評(píng)論 1 267
  • 我被黑心中介騙來泰國打工衷快, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留宙橱,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,598評(píng)論 2 362
  • 正文 我出身青樓蘸拔,卻偏偏與公主長得像师郑,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子调窍,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評(píng)論 2 351

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