该文代码来自设计模式之惮一书。
观察者模式定义:
观察者模式也叫做发布订阅模式。
观察者模式中的角色:
1、被观察者
被观察者职责为管理观察者并通知观察者。
2、观察者
对接受到的消息进行处理。
/// <summary> /// 被观察者 /// </summary> public abstract class Subject { /// <summary> /// 观察者集合 /// </summary> private List<IObservable> observableList = new List<IObservable>(); /// <summary> /// 增加观察者 /// </summary> /// <param name="observable">观察者</param> public void AddAbservable(IObservable observable) { this.observableList.Add(observable); } /// <summary> /// 删除观察者 /// </summary> /// <param name="observable">观察者</param> public void DeleteAbservable(IObservable observable) { this.observableList.Remove(observable); } /// <summary> /// 通知所有的观察者 /// </summary> /// <param name="context">通知内容</param> public virtual void NotifyMessage(string context) { Parallel.ForEach(this.observableList, p => p.Update()); } }
/// <summary> /// 观察者 /// </summary> public interface IObservable { /// <summary> /// 更新方法 /// </summary> void Update(); }
/// <summary> /// 具体的被观察者 /// </summary> public class ConcreteSubject : Subject { /// <summary> /// 具体业务 /// </summary> public void DoSomething() { base.NotifyMessage(""); } }
/// <summary> /// 具体观察者 /// </summary> public class ConcreteObservable : IObservable { /// <summary> /// 更新(接收处理消息) /// </summary> public void Update() { //todo } }
[TestClass] public class UnitTest1 { [TestMethod] public void TestMethod1() { var subject = new ConcreteSubject(); var obs = new ConcreteObservable(); subject.AddAbservable(obs); subject.DoSomething(); } }
详细细节查看设计模式之惮一书-观察者模式.
原文:http://www.cnblogs.com/-ShiL/p/Star_200920140625.html