觀察者模式(有時被稱為模型(model)- 檢視(view)模式、源-收聽者(listener)模式)或從屬者模式)是軟體設計模式的一種。在此種模式中,乙個目標物件管理所有相依於它的觀察者物件,並且在它本身的狀態改變時主動發出通知,這通常通過呼叫各觀察者所提供的方法來實現。此種模式通常被用來實現事件處理系統
觀察者模式是一種物件行為模式。它定於物件間一種一對多的依賴關係,當乙個物件的狀態發改變時,所有依賴於它的物件都得到通知並被自動更新,在觀察者模式中,主題是通知的發布者,它發出通知時並不需要知道誰是它的觀察者,可以有任意數目的觀察者訂閱並接收通知。觀察者模式不僅被廣泛應用於軟體介面元素之間的互動,在業務物件之間的互動,許可權管理等方面也有廣泛應用。
觀察者模式定義了物件間的一種一對多的組合關係,以便乙個物件的狀態發生變化是,所有依賴於它的物件得到通知並自動重新整理。
1、主題-訊息發布者:
1)定義主題介面
public
inte***ce
isubject
這裡以氣象資料為主題實現類
public
class
weathdata
implements
isubject
public
weathdata()
public
void
datachange()
//模擬資料變化
public
void
changeweathdata
(float humidity,
float temperature,
float pressure)
}private
void
setchange()
public
float
gethumidity()
public
void
sethumidity
(float humidity)
public
float
gettemperature()
public
void
settemperature
(float temperature)
public
float
getpressure()
public
void
setpressure
(float pressure)
@override
public
void
registerobserver
(iobserver obs)
observers.
add(obs);}
@override
public
void
removeobserver
(iobserver obs)
}//推送訊息模式
@override
public
void
publishmessage
(object obj)
change =
false;}
}//抽取訊息模式,觀察者通過主題物件get方法選擇性讀取訊息
public
void
publishmessage()
}
2)觀察者
定義觀察者介面:
public
inte***ce
iobserver
觀察者實現類:
public
class
observer
implements
iobserver
@override
public
void
dealmessage
(isubject publisher, object obj)
}private
void
display()
}
3)演示:
public
class
demo
}
設計模式之觀察者模式
首先說了乙個自己的小例子吧,前兩天我的乙個朋友來找我玩,因為路途比較遠,我需要知道他的位置,然後安排好時間去接他,那麼在這個例子中,我就是乙個觀察者,需要時時刻刻觀察他的位置,我的朋友就是乙個被觀察者。那麼需要知道我朋友的位置,就有兩種方式,第一,我自己打 問,第二,我的朋友告訴我,下面我們來看看這...
設計模式之觀察者模式
一 作用 讓多個觀察者監視某一物件的變化,如果物件變化,則通知所有觀察者。二 例子 抽象主題類 public abstract class subject 移除觀察者 public void detach observer observer 向觀察者 們 發出通知 public void notif...
設計模式之觀察者模式
觀察者模式的定義是 定義物件間的一種一對多的依賴關係。當乙個物件的狀態發生變化時,所有依賴它的物件都會得到通知並自動更新 報社跟讀者的例子 我們用報社和讀者之間的關係來模擬觀察者模式。包含以下主體 報社 news office 讀者介面 reader 具體讀者 reader 二逼青年 reader ...