Tapestry

          記錄學習Tapestry專用布格格。很多文章都轉(zhuǎn)載網(wǎng)絡。

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            20 隨筆 :: 0 文章 :: 4 評論 :: 0 Trackbacks

          注意啦,Delegate堂而皇之地作為“一等公民”在C#中“直接支持”,而Tapestry這樣的Java社區(qū)的著名項目又“轉(zhuǎn)而采用”,給個理由先?


          在Tapestry的文檔中,關于Listener Methods有這么一段話:

          Delegate在Java語言中并非“一等公民”,但采用OO思維很容易實現(xiàn)它。還是先來看看Tapestry把Delegate派何用場吧,建立個感性認識:

          關于Delegate的講解,還是看看《應用框架的設計與實現(xiàn)》一書是怎么講的吧:

          -------下列內(nèi)容引自《應用框架的設計與實現(xiàn)》一書------------

          委托乍看有點兒難于理解,這是因為它調(diào)用方法的思路不同于常規(guī)。簡言之,委托是以面向?qū)ο蟮姆绞絹碚{(diào)用方法,圖7-1說明了常規(guī)的方法調(diào)用和委托之間的區(qū)別。

          圖7-1 常規(guī)方法調(diào)用與通過委托的方法調(diào)用之間的比較


          使用常規(guī)方法調(diào)用時,你需要創(chuàng)建一個包含待調(diào)用方法的對象,然后調(diào)用該方法,并傳遞它需要的參數(shù)。其中,指定要調(diào)用哪個對象的哪個方法,和調(diào)用方法本身,是 “一下子”完成的。然而,通過委托來進行方法調(diào)用則不同,它將“方法調(diào)用的定義”和“方法的調(diào)用”區(qū)分開來。仔細觀察圖7-1,有一個delegate的實例,它封裝了調(diào)用方法所必須的方法信息。使用委托來調(diào)用方法包括三步:定義委托對象,創(chuàng)建委托實例,再調(diào)用委托實例。我們知道,委托本質(zhì)上是為“方法” 本身建立的對象,它和我們大部分代碼中的“方法”感覺上有很大不同。

          -------上面內(nèi)容引自《應用框架的設計與實現(xiàn)》一書------------

          注意啦,Delegate堂而皇之地作為“一等公民”在C#中“直接支持”,而Tapestry這樣的Java社區(qū)的著名項目又“轉(zhuǎn)而采用”,給個理由先?答案是:它提供的這種兩個對象之間的這種間接(indirection)關系,對平臺級軟件、以及auto wire特別重要的軟件,簡直太有用了。

          你要是說采用“常規(guī)Listener方法”也“差不多”呀,我要問了:差不多是差多少?研讀研讀Tapestry本身吧!它同時采用了“常規(guī) Listener方法”和“基于Delegate的Listener方法”,你以為Howard這樣的架構師會是“靠拍腦袋來設計的人”嗎?!

          posted on 2007-01-29 18:44 Tapestry 閱讀(344) 評論(0)  編輯  收藏 所屬分類: Tapestry
          主站蜘蛛池模板: 略阳县| 托克逊县| 孝感市| 榆林市| 商洛市| 南城县| 洛扎县| 湖北省| 红安县| 临西县| 慈利县| 龙胜| 上虞市| 明光市| 陆川县| 湘阴县| 浦东新区| 南昌市| 阜宁县| 乌鲁木齐市| 修武县| 东光县| 织金县| 三门县| 玉田县| 青海省| 青州市| 朝阳市| 北川| 封丘县| 琼中| 漳州市| 泸溪县| 哈密市| 高平市| 明水县| 分宜县| 绩溪县| 项城市| 南康市| 彭泽县|