圣誕主題也少量運(yùn)用一些設(shè)計(jì)模式,結(jié)合下實(shí)際的代碼,讓大家對(duì)模式的實(shí)際運(yùn)用有一定的理解。這里主要講解下最常見"觀察者模式"的概念,并且在后面的代碼會(huì)實(shí)際運(yùn)用到
理論上說,觀察者模式又叫發(fā)布-訂閱模式,就是定義一個(gè)一對(duì)多的依賴關(guān)系,當(dāng)一個(gè)對(duì)象的狀態(tài)發(fā)生改變,所依賴它的對(duì)象將會(huì)得到這個(gè)改變的通知。在JS的實(shí)現(xiàn)級(jí)上,一般通過事件的方式模擬發(fā)布-訂閱模式
簡單的來說,我們可以這樣想下,去商場(chǎng)買衣服,剛好斷貨了,特別喜歡的話就會(huì)留下電話,等待賣家通知,所以就是一個(gè)典型的發(fā)布-訂閱的關(guān)系,買家不需要每天去詢問是否到貨,賣家到后才會(huì)主動(dòng)通知
說了半天,在JS中用這個(gè)東東具體干嘛呢? 設(shè)計(jì)模式的核心就是為了解耦,解耦,解耦重要事說三遍。通過這個(gè)模式,一個(gè)對(duì)象可以不再顯示的調(diào)用另外一個(gè)對(duì)象的接口了,或者不關(guān)心對(duì)象的內(nèi)部運(yùn)行狀態(tài),只對(duì)感興趣的事件進(jìn)行觀察了,具體用法后續(xù)的頁面切換會(huì)講解到,這里先理解下如何實(shí)現(xiàn)這個(gè)模式的簡單邏輯。
JS里對(duì)觀察者模式的實(shí)現(xiàn)是通過回調(diào)來實(shí)現(xiàn)的,參考右邊的代碼observer.js,其內(nèi)部包含了3個(gè)方法:訂閱、退訂、發(fā)布也就是對(duì)應(yīng)的bind、unbind、trigger方法
創(chuàng)建一個(gè)觀察者對(duì)象
var observer = new Observer();
通過調(diào)用subscribe方法,實(shí)現(xiàn)一個(gè)事件的觀察
observer.subscribe("任務(wù)名",處理函數(shù))
通過publish觸發(fā)觀察事件,在任意時(shí)刻觸發(fā)了這個(gè)觀察的任務(wù)名,將會(huì)觸發(fā)這個(gè)事件訂閱subscribe方法
observer.publish("任務(wù)名")
取消事件訂閱,意味著就不會(huì)執(zhí)行了
observer.unsubscribe("任務(wù)名")
觀察者的使用場(chǎng)合就是:當(dāng)一個(gè)對(duì)象的改變需要同時(shí)改變其它對(duì)象,并且它不知道具體有多少對(duì)象需要改變的時(shí)候,就應(yīng)該考慮使用觀察者模式。總的來說,觀察者模式所做的工作就是在解耦,讓耦合的雙方都依賴于抽象,而不是依賴于具體。從而使得各自的變化都不會(huì)影響到另一邊的變化。概念是有一點(diǎn)抽象的,等到后面實(shí)際結(jié)合理解。
請(qǐng)驗(yàn)證,完成請(qǐng)求
由于請(qǐng)求次數(shù)過多,請(qǐng)先驗(yàn)證,完成再次請(qǐng)求
打開微信掃碼自動(dòng)綁定
綁定后可得到
使用 Ctrl+D 可將課程添加到書簽
舉報(bào)