您的位置:首页 > 其它

观察者模式

2015-05-29 20:51 204 查看
观察者模式:定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,这个主题对象在状态发生变化时,会通知所有观察者对象,使他们能够自动更新自己。

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace 观察者模式

{

abstract class Observer //观察者

{

public abstract void Update();

}

abstract class Subject

{

private IList<Observer> observers = new List<Observer>();

public void Attach(Observer o)

{

observers.Add(o);

}

public void Detach(Observer o)

{

observers.Remove(o);

}

public void Notify()

{

foreach (Observer o in observers) //给所有登记过的观察者发出通知

{

o.Update();

}

}

}

class ConcreteSubject : Subject

{

private string state; //主题状态变化

public string State

{

get { return state; }

set { state=value;}

}

}

class ConcreateObserver : Observer

{

private string name;

private string Obstate;

private ConcreteSubject subject;

public ConcreateObserver(ConcreteSubject su, string name)

{

this.subject = su;

this.name = name;

}

public override void Update()

{

Obstate = subject.State; //使本事状态和主题的状态相协调

Console.WriteLine("观察者{0}的新状态是{1}",name,Obstate);

}

public ConcreteSubject Subject

{

get { return subject;}

set{subject=value;}

}

}

class Program

{

static void Main(string[] args)

{

ConcreteSubject s = new ConcreteSubject();

s.Attach(new ConcreateObserver(s,"x"));

s.Attach(new ConcreateObserver(s, "y"));

s.State = "ABC";

s.Notify();

}

}

}

观察者模式的关键对象是主题Subject和观察者Observer,一个Subject可以有任意数目的Oberver,一旦Subject的状态发生变化,所有的

Oberver都可以得到通知。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: