• 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将观察者事件绑定到被观察者中,这样我们就可以通过观察者时间异步通知被观察者

  • 相关阅读:
    echarts如何设置背景图的颜色
    小程序获取的用户头像怎么做成圆形
    小程序源码丢失了怎么在微信平台反编译找回
    微信小程序弹框提示绑定手环实例
    微信小程序仿微信运动步数排行-交互
    微信小程序简单常见首页demo
    微信小程序实现tab页面切换功能
    微信小程序实现一个简单的表格
    2018年各大互联网前端面试题三(阿里)
    java和c/c++
  • 原文地址:https://www.cnblogs.com/May-day/p/6367998.html
Copyright © 2020-2023  润新知