定义:观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,这个主题对象在状态发生变化的时候,会通知所有观察者对象,使他们能够自动更新自己!
UML类图
抽象通知者
这里方便统一管理并且通知所有观察者,一起更新状态,并且可以增加和删除观察者
abstract class SubjectMgr
{
private List<Observer> observers = new List<Observer>();
public void Attach(Observer observer)
{
observers.Add(observer);
}
public void Detach(Observer observer)
{
observers.Remove(observer);
}
public void Notify()
{
foreach(Observer item in observers){
item.Refresh();
}
}
}
抽象观察者
为所有观察者定义一个统一的接口,方便通知者一起调用更新方法,方便所有观察者一起更新自己的状态
abstract class Observer
{
public abstract void Refresh();
}
具体通知者
class ConcreteSubject:SubjectMgr
{
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 Refresh()
{
observerState = subject.SubjectState;
Debug.Log("观察者"+ name+"的新状态是" + observerState);
}
public ConcreteSubject Subject
{
get
{
return subject;
}
set
{
subject = value;
}
}
}
实际调用
ConcreteSubject s = new ConcreteSubject();
s.Attach(new ConcreteObserver(s, "XXX"));
s.Attach(new ConcreteObserver(s, "YYY"));
s.Attach(new ConcreteObserver(s, "ZZZ"));
s.SubjectState = "ABC";
s.Notify();