首页 > 代码库 > 设计模式之-观察者模式

设计模式之-观察者模式

该文代码来自设计模式之惮一书。

观察者模式定义:

  观察者模式也叫做发布订阅模式。

观察者模式中的角色:

  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());        }    }
被观察者(Subject)
 /// <summary>    ///     观察者    /// </summary>    public interface IObservable    {        /// <summary>        ///     更新方法        /// </summary>        void Update();    }
观察者(IObservable)
 /// <summary>    /// 具体的被观察者    /// </summary>    public class ConcreteSubject : Subject    {        /// <summary>        /// 具体业务        /// </summary>        public void DoSomething()        {            base.NotifyMessage("");        }    }
具体的被观察者(ConcreteSubject)
/// <summary>    /// 具体观察者    /// </summary>    public class ConcreteObservable : IObservable    {        /// <summary>        /// 更新(接收处理消息)        /// </summary>        public void Update()        {            //todo        }    }
具体观察者(ConcreteObservable )
[TestClass]    public class UnitTest1    {        [TestMethod]        public void TestMethod1()        {            var subject = new ConcreteSubject();            var obs = new ConcreteObservable();            subject.AddAbservable(obs);            subject.DoSomething();        }    }
场景类(UnitTest1)

详细细节查看设计模式之惮一书-观察者模式.