摘要:原文鏈接進(jìn)擊的觀察者模式商品信息改變帶來的煩惱譯屁話少說放碼過來以下所有代碼參見商品的信息價(jià)格折扣顧客信息是否威會(huì)員購買數(shù)量總消費(fèi)購買時(shí)間戳總消費(fèi)計(jì)算方式從代碼中很容易看得出來我們就是想實(shí)現(xiàn)一個(gè)簡單的計(jì)費(fèi)功能可現(xiàn)實(shí)中商品的價(jià)格可能并不是一成
原文鏈接:進(jìn)擊的觀察者模式
商品信息改變帶來的煩惱Talk is cheap. Show me the code. (譯: 屁話少說, 放碼過來)
以下所有代碼參見Design pattern transformation.
// 商品的信息: 價(jià)格 & 折扣 const data = { price: 100, discount: 0.8 } // 顧客信息: 是否威會(huì)員 & 購買數(shù)量 & 總消費(fèi) & 購買時(shí)間戳 const customer = { "VIP": true, "quantity": 10, "total": 0, } // 總消費(fèi)計(jì)算方式 total = (info) => { if(!info.VIP) { info.total = data.price * info.quantity; } else { info.total = data.price * data.discount * info.quantity; } } total(customer); console.log("customer", customer); // customer { VIP: true, quantity: 10, total: 800 }
從代碼中很容易看得出來, 我們就是想實(shí)現(xiàn)一個(gè)簡單的計(jì)費(fèi)功能. 可現(xiàn)實(shí)中, 商品的價(jià)格可能并不是一成不變的.
data.price = 200
價(jià)格變動(dòng)后, 我們需要及時(shí)地獲取總消費(fèi), 那么就必須重新調(diào)用下 total計(jì)費(fèi).
total(customer); console.log("customer", customer); // customer { VIP: true, quantity: 10, total: 1600 }
這是一個(gè)大數(shù)據(jù)時(shí)代, 任何數(shù)據(jù)都有價(jià)值. 現(xiàn)在, 我們還想要每次購買時(shí)的時(shí)間點(diǎn).
const customer = { "VIP": true, "quantity": 10, "total": 0, + "timeStamp": 0 } // 獲取購買時(shí)間 purchaseTime = (info) => { info.timeStamp = Date.now(); }
于是, 我們需要執(zhí)行的函數(shù)就多了一個(gè).
total(customer) purchaseTime(customer) console.log("customer", customer) // { VIP: true, quantity: 10, total: 1600, timeStamp: 1542293676297 }
如果我們的需求還有很多, 而且不知一個(gè)customer呢. 那么, 每次價(jià)格變化我們需要執(zhí)行很多步驟, 每次啊, 麻煩得很.
+ const customer1 = { + "VIP": false, + "quantity": 8, + "total": 0, + "timeStamp": 0 + } total(customer) purchaseTime(customer) func(customer) ... funcN(customer1) total(customer1) purchaseTime(customer1) func(customer1) ... funcN(customer) ... funcN(customerN)
現(xiàn)在我們就對(duì)上面的代碼進(jìn)行觀察者模式改造.
用觀察者模式改造從上面的例子中
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/99485.html
摘要:為了更好的理解,在閱讀此文之前建議先閱讀上一篇進(jìn)擊之詞法作用域與作用域鏈?zhǔn)裁词情]包閉包的含義就是閉合,包起來,簡單的來說,就是一個(gè)具有封閉功能與包裹功能的結(jié)構(gòu)。在中函數(shù)構(gòu)成閉包。 為了更好的理解,在閱讀此文之前建議先閱讀上一篇《進(jìn)擊JavaScript之詞法作用域與作用域鏈》 1.什么是閉包 閉包的含義就是閉合,包起來,簡單的來說,就是一個(gè)具有封閉功能與包裹功能的結(jié)構(gòu)。所謂的閉包就是...
摘要:有關(guān)函數(shù)柯里化的詳解,請(qǐng)回閱前端進(jìn)擊的巨人五學(xué)會(huì)函數(shù)柯里化。構(gòu)造函數(shù)中的通過操作符可以實(shí)現(xiàn)對(duì)函數(shù)的構(gòu)造調(diào)用。在了解構(gòu)造函數(shù)中的前,有必要先了解下實(shí)例化對(duì)象的過程。 showImg(https://segmentfault.com/img/bVburMp?w=800&h=600); 常見this的誤解 指向函數(shù)自身(源于this英文意思的誤解) 指向函數(shù)的詞法作用域(部分情況) th...
摘要:綁定為這個(gè)數(shù)組五綁定如果使用來創(chuàng)建對(duì)象,因?yàn)楹竺娓氖菢?gòu)造函數(shù),所以稱它為構(gòu)造器調(diào)用。為傳進(jìn)來的構(gòu)造函數(shù)你這要看懂這步就行。 記得剛開始,我理解 this 的時(shí)候 也是云里霧里的,哈哈,希望通過這篇文章,對(duì)你有幫助吧。 關(guān)于 this 最多的說法,就是:誰調(diào)用它,this就指向誰。這話呢,不能說它錯(cuò)了,只能說它講的不嚴(yán)謹(jǐn),為什么呢?我們先來了解下 this 的幾種綁定規(guī)則。 一...
摘要:進(jìn)擊基礎(chǔ)篇一進(jìn)擊基礎(chǔ)篇二配置一進(jìn)擊基礎(chǔ)篇三配置二不解析不依賴第三方模塊的模塊有一些第三方模塊,它本身不依賴于其他模塊,比如,,不去編譯這些庫,會(huì)使得打包更加快速是個(gè)正則或者包含正則的數(shù)組不去解析忽略 進(jìn)擊webpack 4 (基礎(chǔ)篇一)進(jìn)擊webpack4 (基礎(chǔ)篇二:配置 一)進(jìn)擊webpack4 (基礎(chǔ)篇三:配置 二) 不解析不依賴第三方模塊的模塊 noParse 有一些第三方模塊...
摘要:也就是說,并不知道,等是屬于哪個(gè)對(duì)象的哪個(gè)構(gòu)造函數(shù)或者類。構(gòu)造函數(shù)模式與原型模式相結(jié)合的模式。給新建的對(duì)象,添加屬性,建立與構(gòu)造函數(shù)之間的聯(lián)系。另一種就是構(gòu)造函數(shù)繼承了。 前面講完原型鏈,現(xiàn)在來講繼承,加深理解下。 一、對(duì)象的相關(guān)知識(shí) 什么是對(duì)象? 就是一些無序的 key : value 集合, 這個(gè)value 可以是 基本值,函數(shù),對(duì)象。(注意 key 和 value 之間 是冒號(hào) ...
閱讀 3456·2019-08-30 15:55
閱讀 2055·2019-08-30 15:44
閱讀 1460·2019-08-30 12:47
閱讀 747·2019-08-30 11:05
閱讀 1634·2019-08-30 10:54
閱讀 660·2019-08-29 16:07
閱讀 3572·2019-08-29 14:17
閱讀 2230·2019-08-23 18:31