概述
在软件构建过程中,我们需要为某些对象建立一种“通知依赖关系” ——一个对象(目标对象)的状态发生改变,所有的
依赖对象(观察者对象)都将得到通知。如果耦合过强,代码的维护性和扩展性就会变差。这样一来就引出了观察者模
式(Observer),也称发布-订阅模式(Publish/Subscribe)。所有的操作都是通过调用接口来实现,将这种依赖关系
弱化,并形成一种稳定的依赖关系。从而实现软件体系结构的松耦合。
结构图
具体模式
抽象通知者Subject类
当观察者发生变化,通过Notify接口通知所有观察者。避免直接的实现,降低耦合。
abstract class Subject
{
private IList<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 o in observers)
{
o.Update();
}
}
}
抽象观察者Observers类
当得到主题通知时,调用Update。称为更新接口
abstract class Observer
{
public abstract void Update();
}
abstract class Subject
具体观察者concreteObserver类
实现抽象观察者的update接口,更新当前状态。
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 ); } }
客户端
static void Main(string[] args) { ConcreteSubject a = new ConcreteSubject(); a.Attach(new ConcreteObserver (a,"b")); a.SubjectState = "状态a"; a.Notify(); Console.Read(); }