11 17每日部落格

2022-09-09 18:24:19 字數 1292 閱讀 4865

觀察者模式

模式動機

建立一種物件與物件之間的依賴關係,乙個物件發生改變時將自動通知其他物件,其他物件將相應做出反應。在此,發生改變的物件稱為觀察目標,而被通知的物件稱為觀察者,乙個觀察目標可以對應多個觀察者,而且這些觀察者之間沒有相互聯絡,可以根據需要增加和刪除觀察者,使得系統更易於擴充套件,這就是觀察者模式的模式動機。

模式定義

觀察者模式(observer pattern):定義物件間的一種一對多依賴關係,使得每當乙個物件狀態發生改變時,其相關依賴物件皆得到通知並被自動更新。觀察者模式又叫做發布-訂閱(publish/subscribe)模式、模型-檢視(model/view)模式、源-***(source/listener)模式或從屬者(dependents)模式。觀察者模式是一種物件行為型模式。

模式分析

觀察者模式描述了如何建立物件與物件之間的依賴關係,如何構造滿足這種需求的系統。

這一模式中的關鍵物件是觀察目標和觀察者,乙個目標可以有任意數目的與之相依賴的觀察者,一旦目標的狀態發生改變,所有的觀察者都將得到通知。

作為對這個通知的響應,每個觀察者都將即時更新自己的狀態,以與目標狀態同步,這種互動也稱為發布-訂閱(publish-subscribe)。目標是通知的發布者,它發出通知時並不需要知道誰是它的觀察者,可以有任意數目的觀察者訂閱它並接收通知。

模式優缺點

觀察者模式的優點

觀察者模式可以實現表示層和資料邏輯層的分離,並定義了穩定的訊息更新傳遞機制,抽象了更新介面,使得可以有各種各樣不同的表示層作為具體觀察者角色。

觀察者模式在觀察目標和觀察者之間建立乙個抽象的耦合。

觀察者模式支援廣播通訊。

觀察者模式符合「開閉原則」的要求。

觀察者模式的缺點

如果乙個觀察目標物件有很多直接和間接的觀察者的話,將所有的觀察者都通知到會花費很多時間。

如果在觀察者和觀察目標之間有迴圈依賴的話,觀察目標會觸發它們之間進行迴圈呼叫,可能導致系統崩潰。

觀察者模式沒有相應的機制讓觀察者知道所觀察的目標物件是怎麼發生變化的,而僅僅只是知道觀察目標發生了變化。

模式適用環境

在以下情況下可以使用觀察者模式:

乙個抽象模型有兩個方面,其中乙個方面依賴於另乙個方面。將這些方面封裝在獨立的物件中使它們可以各自獨立地改變和復用。

乙個物件的改變將導致其他乙個或多個物件也發生改變,而不知道具體有多少物件將發生改變,可以降低物件之間的耦合度。

乙個物件必須通知其他物件,而並不知道這些物件是誰。

需要在系統中建立乙個觸發鏈,a物件的行為將影響b物件,b物件的行為將影響c物件……,可以使用觀察者模式建立一種鏈式觸發機制。

12 10每日部落格

今天記錄一下我在使用layui元件中的 的時候遇到的問題,就是如何將mysql讀取到的資料顯示在 元件中的url指向的就可以是後台的servlet,然後servlet向前臺傳遞的是乙個json資料,並且要按照官網中的案例進行返回,不然前台的介面無法載入資料並且會提示介面異常。這裡的json是 net...

12 9每日部落格

首先給資料集名稱那一列 新增點選事件 然後呼叫乙個js方法,這個方法中包含layui元件中的彈出視窗的方法 function showthisdatatab name,size 然後我的思路是將這個資料集的名稱或者id傳遞給要開啟的那個html網頁,在那個網頁中在呼叫乙個資料 請求後台並得到資料庫的...

11 29每日部落格

mapreduce例項 reduce端join 在reudce端進行join連線是mapreduce框架進行表之間join操作最為常見的模式。1.reduce端join實現原理 1 map端的主要工作,為來自不同表 檔案 的key value對打標籤以區別不同 的記錄。然後用連線字段作為key,其餘...