觀察者模式(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 的框架敬佩有佳。不知道這其中隱藏了多少未知...