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

  • 相关阅读:
    java设计模式单例模式
    C++了解free和delete
    ExtJs开发教程_001_Ext.data.Store使用方法详解
    ExtJs开发教程_002_如何使用ExtJs中的Ext.data.TreeStore
    C++操作符重载
    【hibernate】学习期间总结与记录
    ExtJs常识性知识解答
    学习指针一些基本操作
    简记mysql在tomcat下和hibernate一起使用,No suitable driver found for的问题
    很高兴今天学了点新东西,关于Cache
  • 原文地址:https://www.cnblogs.com/May-day/p/6367998.html
Copyright © 2011-2022 走看看