标签:
一.基本简介:观察者设计模式定义了对象间的一种一对多的依赖关系,以便一个对象的状态发生变化时,所有依赖于它的对象都得到通知并自动刷新。在现实生活中的可见观察者模式,例如,微信中的订阅号,订阅博客和QQ微博中关注好友,这些都属于观察者模式的应用。
二.实现:比如热水器在烧水的过程中,当水温即将烧开时,会发出报警的声音,显示器上会出现温度监控
public interface IObserver { /// <summary> /// 更新自身状态 /// </summary> void Update(int temp); }
/// <summary> /// IObserverable接口 /// </summary> public interface IObservable { /// <summary> /// 注册IObserver /// </summary> /// <param name="obj"></param> void Register(IObserver obj); /// <summary> /// 取消IObserver的注册 /// </summary> /// <param name="obj"></param> void Unregister(IObserver obj); }
/// <summary> /// 抽象基类 /// </summary> public abstract class SubjectBase:IObservable { private List<IObserver> container = new List<IObserver>(); public void Register(IObserver obj) { container.Add(obj); } public void Unregister(IObserver obj) { container.Remove(obj); } /// <summary> /// 通知所有注册了的Observe /// </summary> protected virtual void Notify(int temp) { foreach (IObserver observer in container) { //调用Observer的Update()方法 observer.Update(temp); } } }
public class Heater:SubjectBase { private int temp;//水温 protected virtual void OnBioiled() { base.Notify(temp); } public void GetMonitoring() { for (int i = 0; i <= 99; i++) { temp = i + 1; if (temp > 95) { OnBioiled(); } } } }
public class Alarm:IObserver { public void Update(int temp) { if (temp == 100) { Console.WriteLine("水烧开了"+temp); } else { Console.WriteLine("开始报警,水快烧开了>> " + temp); } } }
public class Screen:IObserver { public void Update(int temp) { if (temp == 100) { Console.WriteLine("水烧开了" + temp); } else { Console.WriteLine("水快烧开了>> " + temp); } } }
/// <summary> /// C#设计模式-观察者模式 /// </summary> class Program { static void Main(string[] args) { Heater heater = new Heater(); heater.Register(new Screen()); heater.Register(new Alarm()); heater.GetMonitoring(); } }
标签:
原文地址:http://blog.csdn.net/heyangyi_19940703/article/details/51352203