手机版
您的当前位置: 好论文网 > 科技论文 > [欧陆风云4观察者模式]基于观察者模式的事件委托在.NET中的实现与应用

[欧陆风云4观察者模式]基于观察者模式的事件委托在.NET中的实现与应用

来源:科技论文 时间:2018-08-17 点击: 推荐访问:

【www.ho59.com--科技论文】

  摘 要:本文主要介绍观察者模式的基本概念,应用模型,以及在.NET中的实现。并且阐述基于观察者模式的事件委托的实现。
  关键词:观察者模式;事件委托;.NET
  中图分类号:TP311.10
  软件设计模式是体现编程思想,优化程序效率的有效方法。使用设计模式可以提高代码重用性,保证代码可靠性。工厂模式,代理模式,原型模式等软件设计模式在实际编程中都有广泛的应用。本文将以观察者模式为例,说明其在程序设计中的实现以及在事件委托中的应用。
  1 观察者模式
  首先,介绍一下观察者模式的定义。观察者模式又称发布-订阅模式,定义了一种一对多的依赖关系,让多个观察者对象同时监听某个主题对象。当这个主题对象状态发生改变时,会通知所有观察者对象,使其能够自动更新自己的状态。
  下面我们更为具体的解释一下观察者模式。在一个公司里面,老板经常外出,又经常“空降”回来,检查员工的工作状态。那么,很多员工为了既可以在老板不在的时候上网休闲,又不会让老板回来时发现自己在偷懒,就联系公司的前台秘书,在老板回来的时候通过拨打办公室的电话来通知大家老板回来了。在这个例子里面,我们很容易理解,员工就是观察者对象,而老板和前台秘书就是主题对象。
  图1
  如图1所示,Subject类就是抽象主题,它负责把所有观察者对象的引用保存在一个集合里面,每个主题可以有任意数量的观察者,抽象主题提供一个接口可以增加,删除和通知观察者对象。Concrete Subject类,是具体的主题,负责将有关状态存入具体观察者对象,在具体主体对象内部状态改变时,给所有注册的观察者对象发通知。在我们的例子中,老板和秘书都属于具体的主体对象。Observer类,是抽象观察者,负责给具体观察者定义接口,在得到主题的通知时更新自己。Concrete Observer类就是具体的观察者,实现抽象观察者的更新接口。办公室里的员工就是具体的观察者。下面就是.NET实现观察者模式的例子。
  在介绍事件委托之前,我们先来总结一下观察者模式的优点以及不足。观察者模式应用在当一个对象的改变需要同时影响其它对象的改变的时候,为了维持程序一致性,而又不增加耦合性,通过让耦合双方都依赖于抽象而非具体,使得各自变化都不会影响另一边的变化,这也是依赖倒转原则的体现。而之所以用接口而非抽象类来定义,是因为在实际的应用中,观察者们可能是毫不相关的类,但它们都根据主体对象的通知更新自己的状态,所以只抽象出方法给抽象观察者类。而观察者模式也存在不足的地方。
  2 事件委托
  观察者模式的不足之处体现在,一定要有一个公共接口Object类,并且每个具体的观察者对象都要是实现这个类,而Subject类要依赖与Object类,从前面的例子可以看出,Subject类需要依赖于Object中的Update()方法,就是说如果没有Object类,就没有办法实现通知的功能。以VS 2005为例,当运行程序点击运行按钮的时候,软件也页面会发生多处变化,其中包括工具栏,控制台窗体显示,工具箱消失等。而这些变化涉及到了多个组件由同一事件触发,符合应用观察者模式。但是这些组件早就被制造商封装了,没有办法让每个控件都去实现一个Object接口。那么如何来解决这个问题,就要应用到事件委托。
  事件委托就是一种可以不依赖于抽象观察者对象,由客户端决定通知哪些观察者的机制。事件委托的一个关键就是声明一个委托对象,可以有系统自定义的,如EventHandler,也可以是用户自定义的。
  delegate void EventHandler();
  public event EventHandler Update;
  声明一个委托对象需要用delegate关键字,而声明一个事件对象要用event关键字。由此我们看出,委托就是一种引用方法类型,当我们为委托赋值方法的时候,委托就将获得该方法的全部行为,委托方法的使用与其它方法相同,具有返回值和参数。我们可以将委托看成是一种对函数这个“对象”的“类”,而委托的实现就是一个具体的函数“对象”。委托所赋值的方法可以属于不同类并且所有赋值的方法都会被依次唤醒,值得注意的是,所赋值的方法必须具有相同的参数列表和返回值类型。而事件是指在发生其他类或对象关注的事件时,类或对象可以通过时间通知它们。这样我们不再需要Observer类,可以直接在客户端调用secretary.Update()+=new EventHandler(ConcreteObject cObject.methodA)来实现监听。
  观察者模式及其应用事件委托在软件开发过程中是不可或缺的一部分,事件监听在面向对象语言中有着重要的作用,不仅在.NET中有委托事件,在JAVA中也有GUI的事件监听,深刻理解观察者模式是面向对象编程的一种基本思想。
  参考文献:
  [1]程杰.大话设计模式[M].北京:清华大学出版社,2007.
  [2]MSDN.Microsoft开发人员网络[OL].http://msdn.microsoft.com/zh-cn/default.aspx.
  [3]Freeman,E.Head First设计模式(中文版)[M].北京:中国电力出版社,2007.
  作者简介:王贯飞(1966.4-),女,副教授,本科,主要从事计算机多媒体、Flash动画、编程、多媒体课件制作。
  作者单位:辽宁轻工职业学院,辽宁大连 116100

本文来源:http://www.ho59.com/kj/12488/

推荐内容

好论文网 www.ho59.com

Copyright © 2002-2018 . 好论文网 版权所有 京ICP备10015900号

Top