学习C#设计模式(十四)观察者模式

观察者模式

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Observer
{
    public interface IOrchard
    {
        void Add(IMonitor monitor);//添加监控员接口方法

        void Remove(IMonitor monitor);//移除监控员接口方法

        void Notify();//通知监控员更新监控状态方法
    }

    //果园类
    public class Orchard : IOrchard
    {
        private List<IMonitor> monitors = new List<IMonitor>();//监控员列表

        public string State { get; set; }
        //添加监控员
        public void Add(IMonitor monitor)
        {
            monitors.Add(monitor);
        }
        //移除监控员
        public void Remove(IMonitor monitor)
        {
            monitors.Remove(monitor);
        }
        public void Notify()
        {
            foreach (var item in monitors)
            {
                item.Update();
            }
        }
    }

    public interface IMonitor
    {
        void Update();//更新监督状态接口方法
    }

    //果园监控员
    public class Monitor : IMonitor
    {
        private Orchard orchard;

        private string name;

        public Monitor(Orchard myClass, string Name)
        {
            this.orchard = myClass;

            this.orchard.Add(this);//将自身添加到果园监控着列表

            this.name = Name;
        }

        public void Update()
        {
            Console.WriteLine("{0}监控{1}", name, orchard.State);
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Orchard orchard = new Orchard();//创建果园实例

            IMonitor bjMonitor = new Monitor(orchard, "北京果园监控员");//北京果园监控员

            IMonitor shMonitor = new Monitor(orchard, "上海果园监控员");//上海果园监控员

            orchard.State = "苹果园";//将果园监控状态改为苹果园

            orchard.Notify();//通知监控员更新监控状态

            Console.ReadKey();
        }
    }
}

代码分析:

本实例代码实现了观察者模式,首先创建了果园接口IOrchard及其派生类Orchard,然后创建了监控员接口IMonitor及其派生类Monitor,IOrchard接口主要提供了添加(Add)和删除(Remove)果园监控员及通知(Notify)果园监控员状态更新这三种接口方法,Orchard 类实现了这些接口,在Orchard类中保存了所有对果园进行监控的果园监控员列表,当Orchard的状态发生改变时将通知所有的果园监控员,调用Monitor类的Update方法,实现Monitor状态的同步更新。

说明:
观察者模式主要实现了对象间状态的一致性,当一个对象状态发生改变时,依赖该对象的对象都会得到状态变更的通知。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值