zoukankan      html  css  js  c++  java
  • 设计模式之-观察者模式

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

    观察者模式定义:

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

    观察者模式中的角色:

      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)

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

  • 相关阅读:
    UVA11825 Hackers' Crackdown
    UVA 11346 Probability
    Codeforces 12 D Ball
    bzoj 4766: 文艺计算姬
    Codeforces 757 F Team Rocket Rises Again
    [HAOI2011] problem C
    Atcoder 3857 Median Sum
    bzoj4399 魔法少女LJJ
    bzoj2638 黑白染色
    bzoj4197 [Noi2015]寿司晚宴
  • 原文地址:https://www.cnblogs.com/-ShiL/p/Star_200920140625.html
Copyright © 2011-2022 走看看