定義對象之間的一種一對多依賴關系,使得每一個對象發生狀態的變化時,其相關依賴對象皆得到通知并被自動更新,又稱為發布-訂閱模式、模型-視圖模式、源-監聽器模式或從屬者模式。
當對象間存在一對多關系時,則使用觀察者模式(Observer Pattern)。比如,當一個對象被修改時,則會自動通知依賴它的對象。觀察者模式屬于行為型模式。
結構圖
結角色與理解
- 觀察者模式共分為四種角色:
- 首先對目標類和觀察者進行抽象以便后期對程序進行擴展,目標類持有觀察者的引用,實現自身變化時對觀察者更新方法的調用。
核心代碼
? 目標類
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("目標類更改了狀態");
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("");
}
}
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
監聽器
+關注
關注
0文章
11瀏覽量
14465
發布評論請先 登錄
相關推薦
CC2540廣播者角色和觀察者角色切換代碼怎么編寫?
希望一個CC2540先通過觀察者角色獲取其他廣播者的廣播數據,然后在切換為廣播者角色將這些數據廣播給另外一個觀察者?這樣就需要編程實現觀察者
發表于 03-16 10:27
RN4020觀察者模式無法正常工作怎么回事
中心,支持MLDP,并使UART流控制R,1//重新引導,使更改生效J,1//觀察者模式你對這個問題有什么想法?謝謝,弗朗西斯科
發表于 04-22 09:03
屬性觀察者的特點
屬性觀察者,類似于觸發器。用來監視屬性的除初始化之外的屬性值變化,當屬性值發生改變時可以對此作出響應。有如下特點: 1,不僅可以在屬性值改變后觸發didSet,也可以在屬性值改變前觸發willSet
發表于 11-04 07:10
觀察者模式在嵌入式編程設計中有何作用
觀察者模式是最常見的模式之一。這種模式提供一種方法來時對象“監聽”其他對象,而不需要修改任何數據服務器。在嵌入式領域,這意味著數據能夠很容易分享給其他元素。
發表于 12-22 08:31
在 Java8 環境下實現觀察者模式的實例分析
觀察者(Observer)模式又名發布-訂閱(Publish/Subscribe)模式,是四人組(GoF,即 Erich Gamma、Richard Helm、Ralph Johnson
發表于 10-12 16:09
?0次下載
評論