觀察者 模式

觀察者 模式

觀察者 模式

觀察者 模式

又叫做發佈訂閱模式,一到多個觀察者會監聽
某一個主題物件。當主題物件狀態發生變化時,
會通知所有觀察者物件,使它們能夠自動更新
自己。

abstract class Subject
{
private IListobservers = new List();
public void Attach(Observer observer)
{
observers.Add(observer);
}
public void Detach(Observer observer)
{
observer.Remove(observer);
}
public void Notify()
{
foreach(Observer o in observers)
{
o.Update();
}
}
}

abstract class Observer
{
public abstract void Update();
}

class ConcreteSubject : Subject
{
private string subjectState;
public string SubjectState
{
get { return subjectState; }
set { subjectState = value; }
}
}

class ConcreteObserver : Observer
{
private string name;
private string observerState;
private ConcreteSubject subject;

public ConcreteObserver(ConcreteSubject subject, string name)
{
    this.subject = subject;
    this.name = name;
}
public override void Update()
{
    observerState = subject.SubjectState;
    Console.WriteLine("觀察者{0}的新狀態{1}", name, observerState);
}
public ConcreteSubject Subject
{
    get { return subject; }
    set { subject = value; }
}

}

static void Main(string[] args)
{
ConcreteSubject s = new ConcreteSubject();
s.Attach(new ConcreteObserver(s, “X”));
s.Attach(new ConcreteObserver(s, “Y”));
s.Attach(new ConcreteObserver(s, “Z”));
s.SubjectState = “ABC”;
s.Notify();
}