设计模式之-观察者模式

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

观察者模式定义:

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

观察者模式中的角色:

  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)

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

原文地址:https://www.cnblogs.com/-ShiL/p/Star_200920140625.html