观察者模式:定义了一种一对多的依赖关系,让多个观察者对象同时监听一个主题。这个主题对象在状态发生变化时,会通知所有观察者对象,使他们能够自动更新自己。
当一个对象的改变需要同时改变其他对象的时候,而且他不知道具体有多少对象有待改变,应该考虑使用观察者模式。
观察者模式所做的工作其实就是解除耦合,让耦合双发都依赖于抽象,而不是依赖于具体。
// 订阅号抽象类 public abstract class Blog { // 保存订阅者列表 private List<IObserver> observers = new List<IObserver>(); public string Symbol { get; set; }//描写订阅号的相关信息 public string Info { get; set; }//描写此次update的信息 public Blog(string symbol, string info) { this.Symbol = symbol; this.Info = info; } // 对同一个订阅号,新增和删除订阅者的操作 public void AddObserver(IObserver ob) { observers.Add(ob); } public void RemoveObserver(IObserver ob) { observers.Remove(ob); } public void Update() { // 遍历订阅者列表进行通知 foreach (IObserver ob in observers) { if (ob != null) { ob.Receive(this); } } } } // 具体订阅号类 public class MyBlog : Blog { public MyBlog(string symbol, string info) : base(symbol, info) { } } // 订阅者接口 public interface IObserver { void Receive(Blog tenxun); } // 具体的订阅者类 public class Subscriber : IObserver { public string Name { get; set; } public Subscriber(string name) { this.Name = name; } public void Receive(Blog xmfdsh) { Console.WriteLine("订阅者 {0} 观察到了{1}{2}", Name, xmfdsh.Symbol, xmfdsh.Info); } } // 客户端测试 class Program { static void Main(string[] args) { Blog xmfdsh = new MyBlog("xmfdsh", "发布了一篇新博客"); // 添加订阅者 xmfdsh.AddObserver(new Subscriber("王尼玛")); xmfdsh.AddObserver(new Subscriber("唐马儒")); xmfdsh.AddObserver(new Subscriber("王蜜桃")); xmfdsh.AddObserver(new Subscriber("敖尼玛")); //更新信息 xmfdsh.Update(); //输出结果,此时所有的订阅者都已经得到博客的新消息 Console.ReadLine(); } }
http://www.cnblogs.com/xmfdsh/p/4047114.html