定義對象之間的一種一對多依賴關系,使得每一個對象發(fā)生狀態(tài)的變化時,其相關依賴對象皆得到通知并被自動更新,又稱為發(fā)布-訂閱模式、模型-視圖模式、源-監(jiān)聽器模式或從屬者模式。
當對象間存在一對多關系時,則使用觀察者模式(Observer Pattern)。比如,當一個對象被修改時,則會自動通知依賴它的對象。觀察者模式屬于行為型模式。
結構圖
結角色與理解
- 觀察者模式共分為四種角色:
- 首先對目標類和觀察者進行抽象以便后期對程序進行擴展,目標類持有觀察者的引用,實現(xiàn)自身變化時對觀察者更新方法的調用。
核心代碼
? 目標類
public abstract class AbstractSubject {
protected List< Observer > observers = new ArrayList< >();
public void attach(Observer observer) {
observers.add(observer);
}
public void detach(Observer observer) {
observers.remove(observer);
}
public abstract void notify(Object args);
}
? 具體目標類
public class ConcreteSubject extends AbstractSubject {
@Override
public void notify(Object args) {
System.out.println("目標類更改了狀態(tài)");
for (Observer observer : this.observers) {
observer.update();
}
}
}
? 觀察類
public interface Observer {
void update();
}
? 具體觀察類
@Data
@NoArgsConstructor
@AllArgsConstructor
public class ConcreteObserver implements Observer {
private String name;
@Override
public void update() {
System.out.println(this.name + "已更新");
}
}
? 客戶端
public class Client {
public static void main(String[] args) {
AbstractSubject as = new ConcreteSubject();
as.attach(new ConcreteObserver("觀察者A"));
as.attach(new ConcreteObserver("觀察者B"));
as.attach(new ConcreteObserver("觀察者C"));
as.notify("");
}
}
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報投訴
-
監(jiān)聽器
+關注
關注
0文章
12瀏覽量
14577
發(fā)布評論請先 登錄
相關推薦
熱點推薦
CC2540廣播者角色和觀察者角色切換代碼怎么編寫?
希望一個CC2540先通過觀察者角色獲取其他廣播者的廣播數(shù)據(jù),然后在切換為廣播者角色將這些數(shù)據(jù)廣播給另外一個觀察者?這樣就需要編程實現(xiàn)觀察者
發(fā)表于 03-16 10:27
RN4020觀察者模式無法正常工作怎么回事
中心,支持MLDP,并使UART流控制R,1//重新引導,使更改生效J,1//觀察者模式你對這個問題有什么想法?謝謝,弗朗西斯科
發(fā)表于 04-22 09:03
屬性觀察者的特點
屬性觀察者,類似于觸發(fā)器。用來監(jiān)視屬性的除初始化之外的屬性值變化,當屬性值發(fā)生改變時可以對此作出響應。有如下特點: 1,不僅可以在屬性值改變后觸發(fā)didSet,也可以在屬性值改變前觸發(fā)willSet
發(fā)表于 11-04 07:10
觀察者模式在嵌入式編程設計中有何作用
觀察者模式是最常見的模式之一。這種模式提供一種方法來時對象“監(jiān)聽”其他對象,而不需要修改任何數(shù)據(jù)服務器。在嵌入式領域,這意味著數(shù)據(jù)能夠很容易分享給其他元素。
發(fā)表于 12-22 08:31
在 Java8 環(huán)境下實現(xiàn)觀察者模式的實例分析
觀察者(Observer)模式又名發(fā)布-訂閱(Publish/Subscribe)模式,是四人組(GoF,即 Erich Gamma、Richard Helm、Ralph Johnson
發(fā)表于 10-12 16:09
?0次下載

觀察者模式,超詳細!
觀察者模式建議你為發(fā)布者類添加訂閱機制, 讓每個對象都能訂閱或取消訂閱發(fā)布者事件流。 不要害怕! 這并不像聽上去那么復雜。 實際上, 該機制包括 1) 一個用于存儲訂閱

什么是觀察者設計模式?Golang中的觀察者模式介紹
當涉及到訂單處理系統(tǒng)時,觀察者設計模式可以用于實現(xiàn)訂單狀態(tài)的變化和通知。
基于藍牙模組Beacon+觀察者模式實現(xiàn)資產(chǎn)管理和室內定位
的一種廣播協(xié)議設備(從機)。Beacon主要參數(shù)①uuid②major③minor④companyID觀察者模式1.用于監(jiān)聽其他設備的廣播數(shù)據(jù)而不與之建立連接;2.

評論