AI智能
改变未来

学习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) 打赏
未经允许不得转载:爱站程序员基地 » 学习C#设计模式(十四)观察者模式