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

posted @ 2017-02-05 16:41  叶丶梓轩  阅读(540)  评论(0编辑  收藏  举报