首頁 » 設計模式 » 觀察者(Observer)

觀察者(Observer)

作者:

分類:

觀察者(Observer)

概念

觀察者模式是一種行為型模式,與訂閱事件不同,觀察者模式用物件導向的方式來做到訂閱的目的。

兩者的差別,除了將訂閱的動作物件化之外,主要是提供者可以做到主動移除訂閱者的動作,例如可以在程序完成後移除特定訂閱者,更深入的做法可以參考.NET觀察者設計模式

範例

//**************
//* author: cian
//* 20231106
//**************

/* 提供訂閱的物件 */
class Subject
{
    private readonly List<IObserver> observerList = new List<IObserver>();
    
    public void Subscribe(IObserver observer)
    {
        if(!observerList.Contains(observer))
        {
            observerList.Add(observer);
        }
    }
    
    public void Unsubscribe(IObserver observer)
    {
        if(observerList.Contains(observer))
        {
            observerList.Remove(observer);
        }
    }
    
    public void Notify(string message)
    {
        foreach(var item in observerList)
        {
            item.Update(message);
        }
    }
}

/* IObserver */
interface IObserver
{
    void Update(string message);
}

class Observer1 : IObserver
{
    public void Update(string message)
    {
        Console.WriteLine($"Observer1: {message}");
    }
}

class Observer2 : IObserver
{
    public void Update(string message)
    {
        Console.WriteLine($"Observer2: {message}");
    }
}

class MainApp
{
    static void Main(string[] args)
    {
        Observer1 ob1 = new Observer1();
        Observer2 ob2 = new Observer2();
        
        Subject subject = Subject();
        subject.Subscribe(ob1);
        subject.Subscribe(ob2);
        
        subject.Notify("Hello World");
    }
}

結語

以上為學習過程的問題紀錄
如果文章有誤,歡迎前輩留言請不吝指教。

參考文章

「cian」的個人頭像

留言

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *