觀察者模式(Observer)

2021-09-06 08:06:52 字數 2574 閱讀 6493

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

uml類圖:

分析:observer類,抽象觀察者,為所有的具體觀察者定義乙個介面,在得到主題的通知時,更新自己這個介面叫做更新介面。抽象觀察者一般用乙個抽象類或者乙個介面實現。更新介面通常包含乙個 update方法,這個方法叫做更新方法。

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

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

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

觀察者模式(observer)實現:

[csharp]view plain

copy

print?

using system;  

using system.collections.generic;  

using system.linq;  

using system.text;  

namespace observer  

/** subject類,可翻譯為主題或者抽象通知者,一般用乙個抽象類或者乙個介面實現。

* 它把所有對觀察者物件的引用,儲存在乙個聚集裡,每個主題都可以有任意數量的觀察者。

* 抽象主題提供乙個介面,可以增加和刪除觀察者物件。

*/abstract

class subject  

//移除觀察者

public

void detach(observer observer)  

//通知

public

void notify()  

}  }  /*

* concretesubject類叫做具體主題或者具體通知者,將有關狀態存入具體觀察者物件:

* 在具體主題的內部狀態得到改變時,給所有登記過的觀察者發出通知。具體主題通常

* 用乙個具體子類實現。

*/class concretesubject : subject  

public

void setsubjectstate(string state)  

}  /** concreteobserver類,具體觀察者,實現抽象觀察者角色所要求的更新介面。以便使本身

* 的狀態與主題的狀態相協調。具體觀察者角色可以儲存乙個指向具體主題物件的引用,具體

* 觀察者角色通常由乙個具體子類實現。

*/class concreteobserver : observer  

public concretesubject getcsubject()  

public

void setcsubject(concretesubject csubject)  

public

override

void update()  

的狀態是",this.name,this.observerstate);  

//throw new notimplementedexception();

}  }  

}  

客戶端:

[csharp]view plain

copy

print?

using system;  

using system.collections.generic;  

using system.linq;  

using system.text;  

namespace observer  

}  }  

觀察者模式總結:

我們知道將乙個系統分割成一系列相互協作的類有乙個很不好的***,那就是需要維護相關物件間的一致性。我們不希望為了維護一致性而使各類緊密耦合,這樣會給維護、擴充套件和重用都帶來不便。而觀察者模式的關鍵物件是主題subject和觀察者observer,乙個subject可以有任意數量依賴它的observer,一旦subject的狀態發生了變化,所有的observer都可以得到通知。subject發出通知時,並不需要知道誰是它的觀察者,也就是說,具體觀察者是誰,它根本不需要知道。而任何乙個具體觀察者不知道也不需要知道其他觀察者的存在。

當乙個物件的改變需要同時改變其他物件,而且它不知道有多少物件待改變時,應該考慮使用觀察者模式。

總的來說,觀察者模式所做的工作其實就是在解除耦合。讓耦合的雙方都依賴於抽象而不是依賴於具體。從而使得各自的變化都不會影響另一邊的變化。

觀察者模式 Observer

個人理解 觀察者模式的核心是subject的attach和detach方法,載入observer物件 uml類圖 實現 public abstract class subject public void detach observer observer public void notify publ...

觀察者模式 ObServer

觀察者模式 observer 定義物件間的一種一對多的依賴關係,當乙個物件的狀態發生改變時,所有依賴於它的物件都得到通知並被自動更新 觀察者模式 observer 觀察者模式定義了一對多依賴關係,讓多個觀察者物件同時監聽某乙個主題物件。讓主題物件在狀態發生變化時,會通知所有觀察者物件,讓他們能夠自動...

觀察者模式(OBSERVER)

觀察者模式是我選擇將其列出來的第乙個模式。看了這個模式的概念之後,有種豁然開朗的感覺。工作也由實踐上公升到了理論。平時使用的各種 net 控制項都使用了這種模式,將這種模式應用到組成乙個系統的各個元件中去,怎乙個 妙 字了得。理解了它之後,不竟又對 net 的框架敬佩有佳。不知道這其中隱藏了多少未知...