這篇文章主要講解了如何使用javascript中的觀察者模式,內(nèi)容清晰明了,對此有興趣的小伙伴可以學(xué)習(xí)一下,相信大家閱讀完之后會有幫助。

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項(xiàng)目有:空間域名、網(wǎng)絡(luò)空間、營銷軟件、網(wǎng)站建設(shè)、上饒網(wǎng)站維護(hù)、網(wǎng)站推廣。
觀察者模式是使用頻率最高的設(shè)計模式之一,用于建立一種對象與對象之間的依賴關(guān)系。
定義:定義對象之間的之間的一種一對多依賴關(guān)系,使得每當(dāng)一個對象狀態(tài)發(fā)生改變時,其相關(guān)依賴對象皆得到通知并被自動更新。觀察者模式的別名包括發(fā)布-訂閱模式,模型-視圖模式,監(jiān)聽模式或從屬模式。觀察者模式是一種對象行為型模式。
場景:我們使用觀察者模式做一個進(jìn)制轉(zhuǎn)換的小demo
示例:
var Subject = function(){
var obServer = [];
var _state;
this.getState = function(){
return _state;
}
this.setState = function(state){
_state = state;
this.notifyAllObservers();
}
this.attach = function(ob){
obServer.push(ob);
}
this.notifyAllObservers = function(){
obServer.map(function(item){
item.update();
});
}
}
var BinaryObserver = function(subject){
var _subject = subject;
_subject.attach(this);
this.update = function(){
console.log('Binary String:' + _subject.getState().toString(2));
}
}
var OctalObserver = function(subject){
var _subject = subject;
_subject.attach(this);
this.update = function(){
console.log('Octal String:' + _subject.getState().toString(8));
}
}
var HexaObserver = function(subject){
var _subject = subject;
_subject.attach(this);
this.update = function(){
console.log('Hex String:' + _subject.getState().toString(16));
}
}
var subject = new Subject();
new HexaObserver(subject);
new OctalObserver(subject);
new BinaryObserver(subject);
subject.setState(15);
// Hex String:f
// Octal String:17
// Binary String:1111在這個例子里面Subject稱為目標(biāo),它是被觀察的對象,一個目標(biāo)允許被多個觀察者觀察,這些觀察者存放于obServer的數(shù)組中,當(dāng)目標(biāo)發(fā)生change時通知所有觀察者。
BinaryObserver,OctalObserver,HexaObserver這三個類稱為觀察者,觀察者將對目標(biāo)的改變作出反應(yīng)。在觀察者中需要維護(hù)一個指向目標(biāo)對象的引用。
觀察者模式總結(jié):
優(yōu)點(diǎn):
* 觀察者模式可以實(shí)現(xiàn)表示層和數(shù)據(jù)邏輯層的分離,定義了穩(wěn)定的消息更新傳遞機(jī)制。
* 觀察者模式在觀察目標(biāo)和觀察者者之間建立一個抽象的耦合。觀察目標(biāo)只需要維持一個抽象觀察者的集合,無需了解其具體觀察者。
* 觀察者模式支持廣播通信,觀察目標(biāo)會向所有已注冊的觀察者發(fā)送通知,簡化了一對多系統(tǒng)的設(shè)計難度
缺點(diǎn):
* 在存在大量觀察者時,對所有觀察者的通知會花大量時間
* 如果觀察者和目標(biāo)之間存在循環(huán)依賴,將會導(dǎo)致系統(tǒng)崩潰
適用場景:
* 系統(tǒng)中存在一個對象的改變將導(dǎo)致一個或多個其他對象也發(fā)生改變。
* 系統(tǒng)中存在大量依賴鏈,A影響B(tài),B影響C,C影響D
看完上述內(nèi)容,是不是對如何使用javascript中的觀察者模式有進(jìn)一步的了解,如果還想學(xué)習(xí)更多內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
標(biāo)題名稱:如何使用javascript中的觀察者模式
當(dāng)前路徑:http://chinadenli.net/article40/jhjgho.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)頁設(shè)計公司、品牌網(wǎng)站制作、、網(wǎng)站收錄、自適應(yīng)網(wǎng)站、微信公眾號
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)