您现在的位置是:Instagram刷粉絲, Ins買粉絲自助下單平台, Ins買贊網站可微信支付寶付款 > 

01 js觀察者模式和發布訂閱模式的區別(觀察者模式和發布/訂閱模式的區別)

Instagram刷粉絲, Ins買粉絲自助下單平台, Ins買贊網站可微信支付寶付款2024-05-05 13:09:54【】9人已围观

简介觀察者模式和發布-訂閱模式的區別【1】定義觀察者模式定義了對象間的一種一對多的依賴關系,當一個對象的狀態發生改變時,所有依賴于它的對象都將得到通知,并自動更新。觀察者模式屬于行為型模式,行為型模式關注

觀察者模式和發布-訂閱模式的區別

【1】定義

觀察者模式定義了對象間的一種一對多的依賴關系,當一個對象的狀態發生改變時,所有依賴于它的對象都將得到通知,并自動更新。觀察者模式屬于行為型模式,行為型模式關注的是對象之間的通訊,觀察者模式就是觀察者和被觀察者之間的通訊。觀察者模式有一個別名叫“發布-訂閱模式”,或者說是“訂閱-發布模式”,訂閱者和訂閱目標是聯系在一起的,當訂閱目標發生改變時,逐個通知訂閱者。

【2】案例

【3】主要解決的問題

一個對象狀態改變給其他對象通知的問題,而且要考慮到易用和低耦合,保證高度的協作。

【4】優點

【5】缺點

【1】介紹

其實24種基本的設計模式中并沒有發布-訂閱模式,上面也說了,他只是觀察者模式的一個別稱。但是經過時間的沉淀,似乎他已經強大了起來,已經獨立于觀察者模式,成為另外一種不同的設計模式。在現在的發布訂閱模式中,稱為發布者的消息發送者不會將消息直接發送給訂閱者,這意味著發布者和訂閱者不知道彼此的存在。在發布者和訂閱者之間存在第三個組件,稱為消息代理或調度中心或中間件,它維持著發布者和訂閱者之間的聯系,過濾所有發布者傳入的消息并相應地分發它們給訂閱者。

【2】案例

【3】優點

【4】缺點

【5】主要解決問題

發布-訂閱模式是前端常用的一種設計模式,現在主流的MVVM框架,都大量使用了此設計模式,其主要作用有以下兩點:

前端的事件綁定有三要素:

從表面上看:

往更深層次講:

從使用層面上講

觀察者模式和發布/訂閱模式的區別

觀察者(Observer)模式又名發布-訂閱(Publish/Subscribe)模式。GOF給觀察者模式如下定義:定義對象間的一種一對多的依賴關系,當一個對象的狀態發生改變時,所有依賴于它的對象都得到通知并被自動更新。

在這里先講一下面向對象設計的一個重要原則——單一職責原則。因此系統的每個對象應該將重點放在問題域中的離散抽象上。因此理想的情況下,一個對象只做一件事情。這樣在開發中也就帶來了諸多的好處:提供了重用性和維護性,也是進行重構的良好的基礎。

因此幾乎所有的設計模式都是基于這個基本的設計原則來的。觀察者模式的起源我覺得應該是在GUI和業務數據的處理上,因為現在絕大多數講解觀察者模式的例子都是這一題材。但是觀察者模式的應用決不僅限于此一方面。

下面我們就來看看觀察者模式的組成部分。

1) 抽象目標角色(Subject):目標角色知道它的觀察者,可以有任意多個觀察者觀察同一個目標。并且提供注冊和刪除觀察者對象的接口。目標角色往往由抽象類或者接口來實現。

2) 抽象觀察者角色(Observer):為那些在目標發生改變時需要獲得通知的對象定義一個更新接口。抽象觀察者角色主要由抽象類或者接口來實現。

3) 具體目標角色(Concrete Subject):將有關狀態存入各個Concrete Observer對象。當它的狀態發生改變時, 向它的各個觀察者發出通知。

4) 具體觀察者角色(Concrete Observer):存儲有關狀態,這些狀態應與目標的狀態保持一致。實現Observer的更新接口以使自身狀態與目標的狀態保持一致。在本角色內也可以維護一個指向Concrete Subject對象的引用。

觀察者模式和發布訂閱模式區別

2019-03-06-12:31 午飯吃完啦~

觀察者模式和發布訂閱模式最大的區別就是發布訂閱模式有個事件 調度中心 !!!

觀察者模式中觀察者和目標直接進行交互,而發布訂閱模式中統一由 調度中心 進行處理,訂閱者和發布者 互不干擾 。這樣一方面實現了 解耦 ,還有就是可以實現更細粒度的一些控制。比如發布者發布了很多消息,但是不想所有的訂閱者都接收到,就可以在 調度中心 做一些處理,類似于 權限控制之類的。

為方便記憶,關鍵字:調度中心、解耦(發布/訂閱者互不干擾)

觀察者模式 vs 發布-訂閱模式

差異總結:

1. 在觀察者模式中,觀察者 (Observer) 是知道Subject的,Subject一直保持對觀察者進行記錄。然而,在發布訂閱模式中,發布者 (Publisher) 和訂閱者 (Subscriber) 不知道對方的存在。它們只有通過消息代理 ( 信息中介 ) 進行通信。

2. 在發布訂閱模式中,組件是松散耦合的,正好和觀察者模式相反。

3. 觀察者模式大多數時候是同步的,比如當事件觸發,Subject就會去調用觀察者的方法。而發布-訂閱模式大多數時候是異步的(使用消息隊列)。

4. 在觀察者模式中依賴于Subject 對象的一系列 Observer 對象在被通知之后只能執行同一個特定的更新方法,而在發布訂閱模式中則可以基于不同的主題去執行不同的自定義事件。

模型闡述:

觀察者模式里,觀察者(Observer)直接訂閱(subscribe)主題(Subject),而當主題被激活的時候,會觸發(fire)觀察者里的事件。

訂閱發布模式里,訂閱者(Subscriber)通過監聽(on)事件總線(Event Bus)里的事件,當事件總線里的事件被觸發(emit)的時候,訂閱者將會執行相應的操作。而這里需要注意的是,事件總線里的事件是通過發布者(Publisher)進行發布(publish)和 通知事件總線 觸發 的。

javascript同步和異步的區別與實現方式

javascript語言是單線程機制。所謂單線程就是按次序執行,執行完一個任務再執行下一個。

對于瀏覽器來說,也就是無法在渲染頁面的同時執行代碼。

單線程機制的優點在于實現起來較為簡單,運行環境相對簡單。缺點在于,如果中間有任務需要響應時間過長,經常會導致

頁面加載錯誤或者瀏覽器無響應的狀況。這就是所謂的“同步模式”,程序執行順序與任務排列順序一致。對于瀏覽器來說,

同步模式效率較低,耗時長的任務都應該使用異步模式;而在服務器端,異步模式則是唯一的模式,如果采用同步模式個人認為

服務器很快就會出現12306在高峰期的表現。。。。

異步模式的四種方式:

1.回調函數callback

所謂回調函數,就是將函數作為參數傳到需要回調的函數內部再執行。

典型的例子就是發送ajax請求。例如:

$.ajax({

async: false,

cache: false,

dataType: 'json',

url: "url",

success: function(data) {

買粉絲nsole.log('success');

},

error: function(data) {

買粉絲nsole.log('error');

}

})

當發送ajax請求后,等待回應的過程不會堵塞程序運行,耗時的操作相當于延后執行。

回調函數的優點在于簡單,容易理解,但是可讀性較差,耦合度較高,不易于維護。

2.事件驅動

javascript可以稱之為是基于對象的語言,而基于對象的基本特征就是事件驅動(Event-Driven)。

事件驅動,指的是由鼠標和熱鍵的動作引發的一連串的程序操作。

例如,為頁面上的某個

$('#btn').onclick(function(){

買粉絲nsole.log('click button');

});

綁定事件相當于在元素上進行監聽,是否執行注冊的事件代碼取決于事件是否發生。

優點在于容易理解,一個元素上可以綁定多個事件,有利于實現模塊化;但是缺點在于稱為事件驅動的模型后,流程不清晰。

3.發布/訂閱

發布訂閱模式(publish-subscribe pattern)又稱為觀察者模式(Observer pattern)。

該模式中,有兩類對象:觀察者和目標對象。目標對象中存在著一份觀察者的列表,當目標對象

的狀態發生改變時,主動通知觀察者,從而建立一種發布/訂閱的關系。

jquery有相關的插件,在這不是重點不細說了。。。。回頭寫個實現貼上來

4.promise模式

promise對象是CommonJS工作組提供的一種規范,用于異步編程的統一接口。

promise對象通常實現一種then的方法,用來在注冊狀態發生改變時作為對應的回調函數。

promise模式在任何時刻都處于以下三種狀態之一:未完成(unfulfilled)、已完成(resolved)和拒絕(rejected)。以CommonJS

Promise/A

標準為例,promise對象上的then方法負責添加針對已完成和拒絕狀態下的處理函數。then方法會返回另一個promise對象,以便于形成promise管道,這種返回promise對象的方式能夠支持開發人員把異步操作串聯起來,如then(resolvedHandler,

rejectedHandler); 。resolvedHandler

回調函數在promise對象進入完成狀態時會觸發,并傳遞結果;rejectedHandler函數會在拒絕狀態下調用。

Jquery在1.5的版本中引入了一個新的概念叫Deferred,就是CommonJS promise A標準的一種衍生。可以在jQuery中創建

$.Deferref的對象。同時也對發送ajax請求以及數據類型有了新的修改,參考JQuery API。

除了以上四種,javascript中還可以利用各種函數模擬異步方式,更有詭異的諸如用同步調用異步的case

只能用team里同事形容java和javascript的一句話作為結尾:

“寫java像在高速路上開車,寫javascript像在草原上開車”-------------以此來形容javascript這種無類型的語言有多自由

but,如果草原上都是坑。

python后端開發需要學什么?

可以參考下面的路徑

很赞哦!(211)

Instagram刷粉絲, Ins買粉絲自助下單平台, Ins買贊網站可微信支付寶付款的名片

职业:程序员,设计师

现居:重庆梁平梁平县

工作室:小组

Email:[email protected]