
觀察者(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");
}
}
結語
以上為學習過程的問題紀錄
如果文章有誤,歡迎前輩留言請不吝指教。
發佈留言