c 之觀察者模式

2021-07-22 09:52:30 字數 1272 閱讀 7892

以下均摘自《大話設計模式》這本書,供大家一起學習和交流,感謝作者。

觀察者模式又叫做發布-訂閱模式;

其定義了一種一對多的依賴關係,讓多個觀察者物件同時監聽某乙個主題物件。這個主題物件狀態發生變化時,會通知所有觀察者物件,使它們能夠自動更新自己。

觀察者模式結構圖:

subject類,可翻譯為主題或者抽象統通知者,一般用乙個抽象類或者乙個介面實現。它把所有對觀察者物件的引用儲存在乙個聚集裡,每個主題都可以有任何數量的觀察者。抽象主題提供乙個介面,可以增加和刪除觀察者物件。

abstract class subject

//移除觀察者

public void detach(observer observer)

// 通知

public void notify() }

}

observer類,抽象觀察者類,為所有的具體觀察者定義乙個介面,在得到主題的通知時更新自己。這個介面叫做

更新介面。

抽象觀察者一般用乙個抽象類或者乙個介面實現。更新介面通常包含乙個update()方法,這個方法叫做更新方法。

abstract class observer

concretesubject類,具體或具體通知者,將有關狀態存入具體觀察者物件;在具體主題的內部狀態改變時,給所有登記過的觀察者發出通知。具體主題角色通常用乙個具體子類實現。

class concretesubject : subject

set}}

concreteobserver類,具體觀察者,實現抽象觀察者所要求的更新介面,以便使本身的狀態與主題的狀態相協調。具體觀察者角色可以儲存乙個指向主題物件的引用。具體觀察者角色通常用乙個具體子類實現。

class concreteobserver : observer

public override void update()

的新狀態是", name, observerstate);

}}

客戶端**

static void main(string args)

結果顯示:

觀察者x的新狀態是 abc

觀察者y的新狀態是 abc

觀察者z的新狀態是 abc

C 之 觀察者模式

觀察者模式用途非常多,比如阿里雲的很多服務都是以觀察者模式提供的。觀察者模式 subject 主題 observer觀察者 又叫發布的訂閱模式 publish 發布 subscribe訂閱 解決的問題是一對多的一種關係,核心就是每當乙個物件改變狀態,則所有依賴於他的物件都得得到通知並自動更新。結合實...

C 之觀察者模式

優點 1 觀察者和被觀察者是抽象耦合的。2 可以建立一套觸發機制。缺點 1 如果乙個被觀察者物件有很多的直接和間接的觀察者的話,將所有的觀察者都通知到會花費很多時間。2 如果在觀察者和觀察目標之間有迴圈依賴的話,觀察目標會觸發它們之間進行迴圈呼叫,可能導致系統崩潰。3 觀察者模式沒有相應的機制讓觀察...

C 觀察者模式

觀察者模式 有時被稱作發布 訂閱模式,觀察者模式定義了一種一對多的依賴關係,讓多個觀察者物件同時監聽某乙個主題物件。這個主題物件在狀態發生變化時,會通知所有觀察者物件,使它們能夠自動更新自己。作用 在大的專案中,當乙個物件的狀態發生改變時可以通知其他相關的物件,這就可以用到觀察者模式。用以將多種物件...