• 测试技术
  • 博客
  • 视频
  • 开源
  • 论坛
  • 沙龙
  • 下载
  • 杂志
  • 招聘

字号: | 推荐给好友 上一篇 | 下一篇

论.NET反射、委托技术与设计模式关系之三

发布: 2008-5-20 11:17 | 作者: 梦幻Dot Net | 来源:  http://dev.21tx.com  | 查看: 41次 | 进入软件测试时代论坛讨论

软件测试时代  委托技术与GOF设计模式中委托的关系

  需要指出的是,.net中的委托技术与GOF在《设计模式》中所提列的委托的意图一致,但在实现方法上有相当大的区别。.NET中的委托更进一步地降低了对象间的耦合性,将静态的组合关系变为运行时的动态组合关系。

  GOF在《设计模式》中定义的委托是:“委托是一种组合方法,它使组合具有与继承同样的复用能力。在委托方式下,有两个对象参与处理一个请求,接受请求的对象将操作委托给它的代理者(delegate),它类似于子类将请求交给它的父类处理。使用继承时,被继承的操作总能引用接受请求的对象。在C++中通过this成员变量,在Smalltalk中则通过self。委托方式为了得到同样的效果,接受请求的对象将自身传给被委托者(代理人),使被委托的操作可以引用接受请求的对象。”

  如果采用.NET的委托技术,上述结构可以更加灵活。Window不引用Rectangle即可实现Area的计算,为此首先声明一个计算面积的委托定义,示例代码如下:

public delegate float Darea();

  然而在Window类中声明与这个代理一致的接口:

class Window
{
 public Darea Area;
}

  这里不需要引用Rectangle类,只是在执行时动态绑定即可:

Rectangle rc = new Rectangle();
Window w = new Window();
w.Area = new Darea(rc.Area);

  这样当调用w的Area时,实际调用的是Reactangel的Area方法。从实现意图上看,.NET的委托更好地实现了GOF所阐述的意图,结构上也更为灵活。但这两种委托解决的不是一个层面的问题,GOF的委托强调的是一种策略,而.NET和委托技术则是具体实现。

  委托技术与设计模式实现

  采用委托技术可以进一步实现用组合代替继承的思路,很多采用继承实现的关系可以采用委托实现。采用委托可以简化下列设计模式的使用。

  (1)模板方法:这种方法采用继承实现具体方法,采用委托可以动态实现方法的组合。

  (2)观察者:可以使用事件委托实现观察者与主题之间的通信。

  (3)中介者:使用委托可以去除工件与中介者之间的耦合关系。

文章来源于软件测试时代 http://www.testage.net/

TAG: net NET Net 反射 关系 技术 模式


软件测试时代开课信息
Google
关于我们 | 合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2007 TestAge(测试时代) 北京慧灵科技有限公司 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备05002925号
技术支持和业务联系:info@testage.com.cn 电话:010-51297073