观察者模式
通过外部的变化,使自己能够很快得到反馈信息,好比股票投资者对股票的变动。
观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对象,使它们能够自动更新自己。
//观察者
public abstract class Observer
{
public abstract void Update();
}
public 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("Observer {0}'s new state is {1}",
name, ObserverState);
}
}
public abstract class Subject
{
private ArrayList observers = new ArrayList();
//添加
public void Attach(Observer ob)
{
observers.Add(ob);
}
//移除
public void Remove(Observer ob)
{
observers.Remove(ob);
}
//修改
public void Notify()
{
foreach (Observer ob in observers)
{
ob.Update();
}
}
}
public class ConcreteSubject : Subject
{
private string subjectState;
public string SubjectState
{
get
{ return subjectState; }
set { subjectState = value; }
}
}
实现
ConcreteSubject subject = new ConcreteSubject();
//ConcreteSubject对观察考对象的引用保存在一个聚集,“blue”就是变化的内容
subject.Attach(new ConcreteObserver(subject, "blue"));
subject.Attach(new ConcreteObserver(subject, "red"));
subject.Attach( new ConcreteObserver(subject, "black"));
subject.SubjectState = "green"; //当外部发生变化时候,要尽快反映变化
subject.Notify();
通过外部的变化,使自己能够很快得到反馈信息,好比股票投资者对股票的变动。
观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对象,使它们能够自动更新自己。
//观察者
public abstract class Observer
{
public abstract void Update();
}
public 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("Observer {0}'s new state is {1}",
name, ObserverState);
}
}
public abstract class Subject
{
private ArrayList observers = new ArrayList();
//添加
public void Attach(Observer ob)
{
observers.Add(ob);
}
//移除
public void Remove(Observer ob)
{
observers.Remove(ob);
}
//修改
public void Notify()
{
foreach (Observer ob in observers)
{
ob.Update();
}
}
}
public class ConcreteSubject : Subject
{
private string subjectState;
public string SubjectState
{
get
{ return subjectState; }
set { subjectState = value; }
}
}
实现
ConcreteSubject subject = new ConcreteSubject();
//ConcreteSubject对观察考对象的引用保存在一个聚集,“blue”就是变化的内容
subject.Attach(new ConcreteObserver(subject, "blue"));
subject.Attach(new ConcreteObserver(subject, "red"));
subject.Attach( new ConcreteObserver(subject, "black"));
subject.SubjectState = "green"; //当外部发生变化时候,要尽快反映变化
subject.Notify();
浙公网安备 33010602011771号