• C#设计模式:观察者模式(Observer Pattern)


    一,什么是观察者模式(Observer Pattern)?

    当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知它的依赖对象

    二,代码如下:

    在一开始我们先定义两个类,一个是Chinese类(被观察者) ,另一个是Jan类(观察者),观察者设计模式是当被观察者状态发生改变,从而触发观察者的事件

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace _16.观察者模式
    {
        /// <summary>
        /// 当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知它的依赖对象
        /// </summary>
        class Program
        {
            static void Main(string[] args)
            {
                Chinese ch = new Chinese("拿着棍子", "穿白色衣服的");
                ch.AddObserver(new Jan("灰衣服"));
                ch.AddObserver(new Jan("白衣服"));
                ch.Coming();     //当中国人的状态发生改变,从而触发观察者绑定在中国人身上的事件(Coming)
    
    
                Console.ReadKey();
            }
        }
    
        /// <summary>
        /// 观察者接口行为
        /// </summary>
        public interface IObserver
        {
            void Action();
        }
    
        /// <summary>
        /// 被观察者
        /// </summary>
        public class Chinese
        {
            private string name;
            private string color;
    
            public Chinese(string name, string color)
            {
                this.name = name;
                this.color = color;
            }
            /// <summary>
            /// 观察者列表
            /// </summary>
            private List<IObserver> _ObserverList = new List<IObserver>();
    
            #region 操作
            public void AddObserver(IObserver observer)
            {
                this._ObserverList.Add(observer);
            }
    
            public void RemoveObserver(IObserver observer)
            {
                this._ObserverList.Remove(observer);
            }
    
            #endregion
    
            /// <summary>
            /// 中国人过来(中国人的状态发生改变)(被观察者的状态发生改变)
            /// 列表进行通知
            /// </summary>
            public void Coming()
            {
                Console.WriteLine(color + "的中国人" + name + "过来了 ...");
                //一系列后续动作
                foreach (var observer in this._ObserverList)
                {
                    observer.Action();
                }
            }
        }
    
        /// <summary>
        /// 集体观察者
        /// </summary>
        class Jan : IObserver
        {
            private string color;
            public Jan(string color)
            {
                this.color = color;
            }
    
            public void Action()
            {
                Console.WriteLine(color + "的日本人说:赶紧跑");
            }
        }
    }

     三,观察者模式的核心是使用Action将观察者事件绑定到被观察者中,这样我们就可以通过观察者时间异步通知被观察者

  • 相关阅读:
    程序员自我【营销】,如何打造个人【品牌】
    程序员应该怎样和领导相处?
    程序员必备能力——晋升之道
    聊一聊 软件系统中的“热力学第二定律”
    程序员如何利用技术管理技巧
    技术人必须掌握能力——深度思考
    程序员逆袭之路——系列文章更新中
    程序员跳槽,该如何选择一家好公司
    C++-运行时类型信息,异常(day11)
    C++-多态,纯虚函数,抽象类,工厂模式,虚析构函数(day10)
  • 原文地址:https://www.cnblogs.com/May-day/p/6367998.html
Copyright © 2020-2023  润新知