摘要:設(shè)計(jì)模式軟件設(shè)計(jì)過程中針對特定問題的簡潔而優(yōu)雅的解決方案單例模式單例模式的定義保證一個(gè)類僅有一個(gè)實(shí)例,并提供一個(gè)訪問它的全局訪問點(diǎn)。通過中介者模式可以解除對象與對象之間的緊耦合關(guān)系。
設(shè)計(jì)模式:軟件設(shè)計(jì)過程中針對特定問題的簡潔而優(yōu)雅的解決方案1.單例模式
單例模式的定義:保證一個(gè)類僅有一個(gè)實(shí)例,并提供一個(gè)訪問它的全局訪問點(diǎn)。實(shí)現(xiàn)的方法為先判斷實(shí)例存在與否,如果存在則直接返回,如果不存在就創(chuàng)建了再返回,這就確保了一個(gè)類只有一個(gè)實(shí)例對象。
適用場景:實(shí)現(xiàn)一個(gè)單一對象,比如彈窗,無論被創(chuàng)建多少次,只應(yīng)該有一個(gè)實(shí)例對象。
class Modal { constructor(title, content) { this.title = title; this.content = content; } } const getModal = (function () { let instance = null; return function () { if (!instance) { instance = new Modal("標(biāo)題", "文本內(nèi)容"); } return instance; } })(); let a = getModal(); let b = getModal(); console.log(a === b); // true2. 策略模式
策略模式的目的就是將算法的使用算法的實(shí)現(xiàn)分離開來。
策略模式至少由兩部分組成:
1.策略類:策略類封裝了具體的算法,并負(fù)責(zé)具體的計(jì)算過程,是可變的;
2.環(huán)境類:環(huán)境類接受客戶的請求,隨后將請求委托給某一個(gè)策略類,不可變;
/*策略類*/ var levelOBJ = { "A": function(money) { return money * 4; }, "B" : function(money) { return money * 3; }, "C" : function(money) { return money * 2; } }; /*環(huán)境類*/ var calculateBouns =function(level,money) { return levelOBJ[level](money); }; console.log(calculateBouns("A",10000)); // 400003. 代理模式
代理模式的定義:為一個(gè)對象提供一個(gè)代用品或占位符,以便控制對它的訪問。
圖片懶加載就是一種典型有用場景:
function LazyImg() {} LazyImg.prototype.getImg = function () { var imgNode = document.createElement("img"); document.body.appendChild(imgNode); imgNode.src = "./fake.png"; return imgNode; } LazyImg.prototype.setImg = function (src) { var imgNode = this.getImg(); var img = new Image(); img.onload = function() { imgNode.src = this.src; } img.src = src; } var pic = new LazyImg(); cx.setImg("./rel.png");4. 中介者模式
中介者模式的定義:通過一個(gè)中介者對象,其他所有的相關(guān)對象都通過該中介者對象來通信,而不是相互引用,當(dāng)其中的一個(gè)對象發(fā)生改變時(shí),只需要通知中介者對象即可。通過中介者模式可以解除對象與對象之間的緊耦合關(guān)系。
現(xiàn)實(shí)生活中,航線上的飛機(jī)只需要和機(jī)場的塔臺通信就能確定航線和飛行狀態(tài),而不需要和所有飛機(jī)通信。同時(shí)塔臺作為中介者,知道每架飛機(jī)的飛行狀態(tài),所以可以安排所有飛機(jī)的起降和航線安排。
裝飾者模式的定義:在不改變對象自身的基礎(chǔ)上,在程序運(yùn)行期間給對象動態(tài)地添加方法。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/105826.html
摘要:開發(fā)中,我們或多或少地接觸了設(shè)計(jì)模式,但是很多時(shí)候不知道自己使用了哪種設(shè)計(jì)模式或者說該使用何種設(shè)計(jì)模式。本文意在梳理常見設(shè)計(jì)模式的特點(diǎn),從而對它們有比較清晰的認(rèn)知。 showImg(https://segmentfault.com/img/remote/1460000014919705?w=640&h=280); 開發(fā)中,我們或多或少地接觸了設(shè)計(jì)模式,但是很多時(shí)候不知道自己使用了哪種設(shè)...
摘要:前端每周清單專注前端領(lǐng)域內(nèi)容,以對外文資料的搜集為主,幫助開發(fā)者了解一周前端熱點(diǎn)分為新聞熱點(diǎn)開發(fā)教程工程實(shí)踐深度閱讀開源項(xiàng)目巔峰人生等欄目。背后的故事本文是對于年之間世界發(fā)生的大事件的詳細(xì)介紹,闡述了從提出到角力到流產(chǎn)的前世今生。 前端每周清單專注前端領(lǐng)域內(nèi)容,以對外文資料的搜集為主,幫助開發(fā)者了解一周前端熱點(diǎn);分為新聞熱點(diǎn)、開發(fā)教程、工程實(shí)踐、深度閱讀、開源項(xiàng)目、巔峰人生等欄目。歡迎...
摘要:但是在中,的生命還會繼續(xù)。這其中最典型的問題便是批量增加元素。這時(shí),如果構(gòu)造函數(shù)被調(diào)用時(shí)沒有參數(shù),則會自動設(shè)置為。因?yàn)閺南到y(tǒng)的角度來說,當(dāng)你用字符串的時(shí)候,它會被傳進(jìn)構(gòu)造函數(shù),并且重新調(diào)用另一個(gè)函數(shù)。 序言 在今天,JavaScript已經(jīng)成為了網(wǎng)頁編輯的核心。尤其是過去的幾年,互聯(lián)網(wǎng)見證了在SPA開發(fā)、圖形處理、交互等方面大量JS庫的出現(xiàn)。 如果初次打交道,很多人會覺得js很簡單...
摘要:前言內(nèi)存泄漏指由于疏忽或錯(cuò)誤造成程序未能釋放已經(jīng)不再使用的內(nèi)存。這里就講一些常見會帶來內(nèi)存泄露的原因。解決方案和都設(shè)為。 前言 內(nèi)存泄漏指由于疏忽或錯(cuò)誤造成程序未能釋放已經(jīng)不再使用的內(nèi)存。內(nèi)存泄漏并非指內(nèi)存在物理上的消失,而是應(yīng)用程序分配某段內(nèi)存后,由于設(shè)計(jì)錯(cuò)誤,導(dǎo)致在釋放該段內(nèi)存之前就失去了對該段內(nèi)存的控制,從而造成了內(nèi)存的浪費(fèi)。這里就講一些常見會帶來內(nèi)存泄露的原因。 0. 全局變量...
摘要:我對知乎前端相關(guān)問題的十問十答張鑫旭張鑫旭大神對知乎上經(jīng)典的個(gè)前端問題的回答。作者對如何避免常見的錯(cuò)誤,難以發(fā)現(xiàn)的問題,以及性能問題和不好的實(shí)踐給出了相應(yīng)的建議。但并不是本身有問題,被標(biāo)準(zhǔn)定義的是極好的。 這一次,徹底弄懂 JavaScript 執(zhí)行機(jī)制 本文的目的就是要保證你徹底弄懂javascript的執(zhí)行機(jī)制,如果讀完本文還不懂,可以揍我。 不論你是javascript新手還是老...
閱讀 1222·2021-08-12 13:24
閱讀 3052·2019-08-30 14:16
閱讀 3367·2019-08-30 13:01
閱讀 2119·2019-08-30 11:03
閱讀 2824·2019-08-28 17:53
閱讀 3137·2019-08-26 13:50
閱讀 2314·2019-08-26 12:00
閱讀 1005·2019-08-26 10:38