当前位置:首页 > Windows程序 > 正文

观察者模式(使用委托)

2021-03-29 Windows程序

观察者模式(有时又被称为发布-订阅Subscribe>模式、模型-视图View>模式、源-收听者Listener>模式或从属者模式)是软件设计模式的一种。在此种模式中,,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。此种模式通常被用来实现事件处理系统。

2.角色

2.1 抽象主题(Subject):它把所有观察者对象的引用保存到一个聚集里,每个主题都可以有任何数量的观察者。抽象主题提供一个接口,可以增加和删除观察者对象。

  2.2 具体主题(ConcreteSubject):将有关状态存入具体观察者对象;在具体主题内部状态改变时,给所有登记过的观察者发出通知。

  2.3 抽象观察者(Observer):为所有的具体观察者定义一个接口,在得到主题通知时更新自己。

  2.4 具体观察者(ConcreteObserver):实现抽象观察者角色所要求的更新接口,以便使本身的状态与主题状态协调。

3.具体实现之委托实现。

模拟的场景:猫叫了,老鼠跑了、主人醒了。

3.1 ISubject 抽象

public delegate void NotifyHandler();
public abstract class ISubject { public event NotifyHandler NotifyEvent; protected void Notify() { if (NotifyEvent != null) NotifyEvent(); } public virtual void Run() { } }

3.2 CatSubject

public class CatSubject : ISubject { public override void Run() { Console.WriteLine("猫叫了..."); this.Notify(); } }

3.3 Observer

public abstract class Observer { protected Observer(ISubject sub) { sub.NotifyEvent += Response; } public abstract void Response(); }

3.4 MouseObserver

public class MouseObserver : Observer { public MouseObserver(ISubject sub) : base(sub) { } public override void Response() { Console.WriteLine("老鼠跑了!"); } }

3.5 MasterObserver

public class Master2Observer : Observer { public Master2Observer(ISubject sub):base(sub) { } public override void Response() { Console.WriteLine("主人醒了...."); } }

3.6 调用

var sub = new CatSubject(); var mouse = new MouseObserver(sub); var master = new Master2Observer(sub); sub.Run();

3.7 结果

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/69497.html