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