Observer Pattern浅谈
1.观察者模式:
定义对象间的一种一对多的依赖关系。当一个对象的状态发生改变时,所有依赖于它的对象都能得到通知并被自动更新。
2.设计原则:
为了交互对象之间的松耦合设计而努力。
3.Observer接口:
View Code
public interface Observer
{
void Update(string content);
}
4.ConcreteObserver类:
View Code
public class Reader : Observer
{
private string _reader;
public string ReaderName
{
get { return _reader; }
set { _reader = value; }
}
public Reader(Subject sb, string reader)
{
sb.AddObserver(this);
_reader = reader;
}
#region Observer Members
public void Update(string content)
{
Console.WriteLine(_reader + ",收到新的订阅:" + content);
}
#endregion
}
5.Subject接口:
View Code
public interface Subject
{
/// <summary>
/// 添加观察者
/// </summary>
/// <param name="ob"></param>
void AddObserver(Observer ob);
/// <summary>
/// 移除观察者
/// </summary>
/// <param name="ob"></param>
void RemoveObserver(Observer ob);
/// <summary>
/// 通知所有观察者
/// </summary>
/// <param name="contenr"></param>
void NotifyObserver(string content);
}
6.ConcreteSubject类:
View Code
public class NewsPaper : Subject
{
List<Observer> list = new List<Observer>();
#region Subject Members
public void AddObserver(Observer ob)
{
list.Add(ob);
}
public void RemoveObserver(Observer ob)
{
list.Remove(ob);
}
public void NotifyObserver(string content)
{
foreach (Observer ob in list)
{
ob.Update(content);
}
}
#endregion
public void Publish(string content)
{
NotifyObserver(content);
}
}
7.测试:
View Code
static void Main(string[] args)
{
NewsPaper np = new NewsPaper();
Reader rd1 = new Reader(np, "小王");
Reader rd2 = new Reader(np, "小张");
np.Publish("这是最新发布的消息");
Console.ReadLine();
}

浙公网安备 33010602011771号