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();
}

posted on 2011-04-22 15:24  Scarface  阅读(260)  评论(0)    收藏  举报

导航