标签:style blog http color strong os
观察者模式(Observer Pattern)也叫做发布订阅模式(Public/Subscribe)。
Subject 被观察者
定义被观察者必须实现的职责,它必须能够动态的增加、取消观察者。它一般是抽象类或者是实现类,仅仅完成作为被观察者必须实现的职责:管理观察者并通知观察者。
/// <summary> /// 被观察者 /// </summary> public abstract class Subject { /// <summary> /// 观察者列表 /// </summary> private List<Observer> lstObserver = new List<Observer>(); /// <summary> /// 添加观察者 /// </summary> /// <param name="observer">观察者</param> public void AddObserver(Observer observer) { this.lstObserver.Add(observer); } /// <summary> /// 删除观察者 /// </summary> /// <param name="observer">观察者</param> public void DelObserver(Observer observer) { this.lstObserver.Remove(observer); } /// <summary> /// 通知所有观察者 /// </summary> public void NotifyObservers() { foreach (Observer item in this.lstObserver) { item.Update(); } } }
ConcreteSubject具体的被观察者
定义被观察者自己的业务逻辑,同时定义对哪些事件进行通知。
/// <summary> /// 具体被观察者 /// </summary> public class ConcreteSubject : Subject { /// <summary> /// 具体业务 /// </summary> public void DoSomething() { Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + ": ConcreteSubject处理完毕,通知观察者!"); this.NotifyObservers(); } }
Observer观察者
观察者收到消息后,即进行update(更新方法)操作,对收到的消息进行处理。
/// <summary> /// 观察者 /// </summary> public interface Observer { /// <summary> /// 更新方法 /// </summary> void Update(); }
ConcreteObserver具体的观察者
每个观察者在收到消息后的处理反应是不同的,各个观察者都有自己的处理逻辑。
/// <summary> /// 具体观察者 /// </summary> public class ConcreteObserver : Observer { /// <summary> /// 更新方法 /// </summary> public void Update() { Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + ": ConcreteObserver收到消息,开始处理!"); } }
场景类
/// <summary> /// 入口 /// </summary> class Program { /// <summary> /// 入口 /// </summary> /// <param name="args">参数</param> static void Main(string[] args) { // 具体被观察者 ConcreteSubject subject = new ConcreteSubject(); // 观察者 Observer obs = new ConcreteObserver(); // 被观察者添加观察者 subject.AddObserver(obs); // 被观察者开始处理业务 subject.DoSomething(); Console.ReadLine(); } }
标签:style blog http color strong os
原文地址:http://www.cnblogs.com/tianxue/p/3822648.html