你的位置:首页 > 软件开发 > ASP.net > 观察者模式与.NET的delegate、event机制

观察者模式与.NET的delegate、event机制

发布时间:2015-12-17 22:00:04
1.引言 最近在写一些程序玩的时候,接触到了delegate(委托)和event(事件),网上查找了很多的资料,有些博文说可以把delegate近似当做C++当中的函数指针来看,由于自己本身对C++的理解并不是很透彻,所以看得仍 ...

1.引言

         最近在写一些程序玩的时候,接触到了delegate(委托)和event(事件),网上查找了很多的资料,有些博文说可以把delegate近似当做C++当中的函数指针来看,由于自己本身对C++的理解并不是很透彻,所以看得仍然朦朦胧胧。今天上课学习了设计模当中的观察者模式。仔细学习之下,又对委托和事件有了新的体悟,特分享给大家。也希望能够与各位大虾多多交流。

2.观察者模式介绍

2.1概述

      观察者模式是建立一种对象与对象之间的依赖关系,一种对象发生改变时将自动通知其他对象,其他对象相应的做出反应。在观察者模式中,发生改变的对象称为观察目标,被通知对象称为观察者,一个观察目标可以对应多个观察者,而且这些观察者之间可以没有任何相互联系。就像在大街上,红灯亮起,来往的汽车停止,绿灯亮起,汽车可以继续前进,在这个过程中,交通信号是汽车的观察目标,大街上的汽车是观察者,并且大街上的每个汽车都是单独的个体没有相互之间的联系。

2.2观察者模式的定义

观察者模式:定义对象之间一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象都得到通知并被更新。

Observer Pattern: Define a one-to-manydependency between objects so that when one object changes state , all itsdependts are notified and update automatically.

2.3观察者模式结构

观察者模式与.NET的delegate、event机制

 观察者模式包含以下四个角色:

(1)Subject(目标)

(2)ConcreteSubject(具体目标)

(3)Observer(观察者)

(4)ConcreteObserve(具体观察者)

2.4代码实例 

using System.Collection//定义一个抽象目标类Subjectabstract class Subject{    //定义一个观察者集合用于存储所有观察者对象   protected ArrayList observers = new ArrayList();   //声明抽象注册方法,用于向观察者集合中增加一个观察者   public abstract void Attach(Observer observer);     //声明抽象的注销方法,用于在观察者集合中删除一个观察者   public abstract void Detach(Oberver observer)   //声明抽象通知方法   public abstract void Notify();   }  //具体目标类ConcreteSubject 是实现了抽象目标类Subject的一个具体//子类,它实现了上述的3中方法class ConcreteSubject : Subject{  public override void Attach(Observer observer)  {    observers.Add(observer);  }    public override void Detach(Observer observer)  {    observers.Remove(observer);  }    //实现通知方法  public override void Notify()  {    //遍历观察者几何,调用每一个观察者的相应方法    foreach (object obs in observers)    {      ((Observer)obs).Update();    }  }    /*抽象观察者一般定义为一个借口,通常只声明一个Update()方法   *为不同观察者的更新(相应)行为定义相同的借口,这个方法在其   *子类中实现。   */   interface Observer   {    void Update();   }     //具体观察者ConcreteObserver中实现Update()方法   class ConcreteObserver : Observer   {    //实现方法    public void Update()    {    //具体更新代码    }   }   static void Main(get='_blank'>string[] args)   {    ...    Subject subject = new ConcreteSubject();    Observer observer = new ConcreteObserver();    subject.Attach(observer);    subject.Notify();    ...   }}

原标题:观察者模式与.NET的delegate、event机制

关键词:.NET

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。