Tapestry

记录学习Tapestry专用布格格。很多文章都转载网络。

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  20 随笔 :: 0 文章 :: 4 评论 :: 0 Trackbacks

注意啦,Delegate堂而皇之地作为“一等公民”在C#中“直接支持”,而Tapestry这样的Java社区的著名项目又“转而采用”,给个理由先?


在Tapestry的文档中,关于Listener Methods有这么一段话:

Delegate在Java语言中并非“一等公民”,但采用OO思维很容易实现它。还是先来看看Tapestry把Delegate派何用场吧,建立个感性认识:

关于Delegate的讲解,还是看看《应用框架的设计与实现》一书是怎么讲的吧:

-------下列内容引自《应用框架的设计与实现》一书------------

委托乍看有点儿难于理解,这是因为它调用方法的思路不同于常规。简言之,委托是以面向对象的方式来调用方法,图7-1说明了常规的方法调用和委托之间的区别。

图7-1 常规方法调用与通过委托的方法调用之间的比较


使用常规方法调用时,你需要创建一个包含待调用方法的对象,然后调用该方法,并传递它需要的参数。其中,指定要调用哪个对象的哪个方法,和调用方法本身,是 “一下子”完成的。然而,通过委托来进行方法调用则不同,它将“方法调用的定义”和“方法的调用”区分开来。仔细观察图7-1,有一个delegate的实例,它封装了调用方法所必须的方法信息。使用委托来调用方法包括三步:定义委托对象,创建委托实例,再调用委托实例。我们知道,委托本质上是为“方法” 本身建立的对象,它和我们大部分代码中的“方法”感觉上有很大不同。

-------上面内容引自《应用框架的设计与实现》一书------------

注意啦,Delegate堂而皇之地作为“一等公民”在C#中“直接支持”,而Tapestry这样的Java社区的著名项目又“转而采用”,给个理由先?答案是:它提供的这种两个对象之间的这种间接(indirection)关系,对平台级软件、以及auto wire特别重要的软件,简直太有用了。

你要是说采用“常规Listener方法”也“差不多”呀,我要问了:差不多是差多少?研读研读Tapestry本身吧!它同时采用了“常规 Listener方法”和“基于Delegate的Listener方法”,你以为Howard这样的架构师会是“靠拍脑袋来设计的人”吗?!

posted on 2007-01-29 18:44 Tapestry 阅读(336) 评论(0)  编辑  收藏 所属分类: Tapestry

只有注册用户登录后才能发表评论。


网站导航: