• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

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

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

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

领测软件测试网  委托技术与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)中介者:使用委托可以去除工件与中介者之间的耦合关系。

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/

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


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

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网