## 引言 **觀察者模式**是一種行為型設計模式,它允許對象之間建立一種一對多的關係,使得當一個對象狀態改變時,所有依賴它的對象都能夠自動得到通知並更新自己的狀態。該模式可以幫助我們實現松耦合的系統,以便更好地應對變化和擴展。 在觀察者模式中,有兩個角色:**觀察者**和**被觀察者**。被觀察者 ...
引言
觀察者模式是一種行為型設計模式,它允許對象之間建立一種一對多的關係,使得當一個對象狀態改變時,所有依賴它的對象都能夠自動得到通知並更新自己的狀態。該模式可以幫助我們實現松耦合的系統,以便更好地應對變化和擴展。
在觀察者模式中,有兩個角色:觀察者和被觀察者。被觀察者負責維護觀察者列表,併在狀態發生改變時通知觀察者;觀察者則負責接收被觀察者的通知併進行相應的處理。
下麵我們通過一個簡單的例子來說明觀察者模式的用法。假設我們要實現一個計數器,每次計數器增加時需要通知所有的觀察者。
觀察者
先定義一個介面IObserver
,用於定義觀察者的行為,該介面只有一個方法Update
,用於接收被觀察者的通知並更新觀察者的狀態。
public interface IObserver
{
void Update(int count);
}
再定義一個觀察者實現ConsoleObserver
,它負責在控制臺上輸出計數器的值。
public class ConsoleObserver : IObserver
{
public void Update(int count)
{
Console.WriteLine($"Count = {count}");
}
}
被觀察者
定義一個被觀察者Counter
,它負責維護觀察者列表,併在計數器增加時通知觀察者。
public class Counter
{
private int count = 0;
private List<IObserver> observers = new List<IObserver>();
public void AddObserver(IObserver observer)
{
observers.Add(observer);
}
public void RemoveObserver(IObserver observer)
{
observers.Remove(observer);
}
public void Increment()
{
count++;
NotifyObservers();
}
private void NotifyObservers()
{
foreach (IObserver observer in observers)
{
observer.Update(count);
}
}
}
然後可以定義一個觀察者ConsoleObserver
,一個被觀察者Counter
,再計數器增加時,通知ConsoleObserver
輸出到控制台。
Counter counter = new Counter();
IObserver consoleObserver = new ConsoleObserver();
counter.AddObserver(consoleObserver);
counter.Increment();
控制台得到輸出Count = 1
。
結論
觀察者模式廣泛應用於GUI(圖形用戶界面)開發、事件驅動系統、消息通知系統、進程間通信等場景中。
它定義了一種一對多的依賴關係,讓多個觀察者對象同時監聽某一個主題對象,當主題對象發生變化時,所有依賴於它的觀察者對象都會得到通知並自動更新。
觀察者模式的作用是將系統中的關註點分離,提高系統的可維護性、擴展性和重用性。通過該模式,主題對象和觀察者對象之間的耦合度降低,讓它們之間的關係更加鬆散,從而使系統更加靈活、可擴展和易於維護。
作者: Peter.Pan
出處: https://www.cnblogs.com/pandefu/>
關於作者:.Net Framework,.Net Core ,WindowsForm,WPF ,控制項庫,多線程
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出 原文鏈接,否則保留追究法律責任的權利。 如有問題, 可郵件咨詢。