2001年10月2日

          在這天,我選擇了生命中的另一半。:::執(zhí)子之手,與子偕老:::

            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            1 隨筆 :: 3 文章 :: 0 評(píng)論 :: 0 Trackbacks
          <2025年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          常用鏈接

          留言簿(1)

          隨筆檔案

          文章分類

          文章檔案

          相冊(cè)

          個(gè)人鏈接

          搜索

          最新評(píng)論

          Template技術(shù)可以很大限度的重用一些資源。其基本思想是將公用資源抽取出來(lái)進(jìn)行復(fù)用,將變化資源剝離出去,最后二者融合在一起,共同作用產(chǎn)生最后的結(jié)果。常見(jiàn)的Template技術(shù)用在2個(gè)方面,一個(gè)是程序代碼Template-即我們常說(shuō)的Template設(shè)計(jì)模式;另一個(gè)方面是文檔復(fù)用-即常見(jiàn)的TemplateEngine,ReportEngine。

          1. Template設(shè)計(jì)模式
          1.1 Template設(shè)計(jì)模式
          Tempate設(shè)計(jì)模式一種非常有用的設(shè)計(jì)模式,人們通常使用他構(gòu)建某個(gè)算法的骨架。將算法中易變的部分抽象成抽象方法(或者提供默認(rèn)實(shí)現(xiàn),子類可以重載)留待子類來(lái)實(shí)現(xiàn)。對(duì)于子類而言,只是需要重載父類中抽象方法。這樣整個(gè)算法的框架就不會(huì)發(fā)生變化。同時(shí)減少了子類的代碼量。請(qǐng)參看如下類圖:

          o_Desing Pattern-Template.gif
          從上圖可以看出來(lái),AbstractClass的templateMethod()方法規(guī)定了整個(gè)算法的框架,其中定義了2個(gè)抽象方法operation1(),operation2()留待子類來(lái)實(shí)現(xiàn)。ConceteClassA,ConcreteClassB這2個(gè)子類繼承AbstractClass,獨(dú)立的分別來(lái)實(shí)現(xiàn)抽象父類中定義的2個(gè)抽象方法。這樣當(dāng)我們實(shí)例化不同ConceteClassA,ConcreteClassB的實(shí)例,就可以得到不同的算法運(yùn)行結(jié)構(gòu)。

          1.2 Template設(shè)計(jì)模式擴(kuò)展
          當(dāng)我們將Template設(shè)計(jì)模式和CallBack設(shè)計(jì)模式一起來(lái)使用的,可以現(xiàn)實(shí)更加靈活的算法,流程處理。Spring框架將這種設(shè)計(jì)模式的作用發(fā)揮到了及至。我們來(lái)看其中的一個(gè)例子:如何利用這種設(shè)計(jì)模式來(lái)簡(jiǎn)化Hibernate的使用。參看代碼片斷:

          r_SpringHibernateTemplate.gif
          在使用Hibernate的時(shí)候,一般的過(guò)程是首先獲取session 對(duì)象,然是使用session去操作數(shù)據(jù)庫(kù)。最后還要處理session的生命周期。為了簡(jiǎn)化這種操作,HibernateTemplate的execute()方法中管理了這個(gè)session的聲明周期。將數(shù)據(jù)庫(kù)操作放在實(shí)現(xiàn)HibernateCallback接口的類中實(shí)現(xiàn)。這樣以來(lái)HibernateCallback的實(shí)現(xiàn)類只需要使用session只做數(shù)據(jù)庫(kù)相關(guān)的操作,而不需要去處理Session之類的其他問(wèn)題。

          2. 文檔復(fù)用
          在文檔中,通常有許多的內(nèi)容是一樣的,只是其中有一部分內(nèi)容不太一樣。如何能有效的復(fù)用文檔中的重復(fù)內(nèi)容呢?一種常見(jiàn)的思路是:將文檔中的重復(fù)部分做成模板,將文檔中變化的部分作為數(shù)據(jù)抽象出來(lái),在真正需要生成文檔的時(shí)候,將二者merge起來(lái)。這樣就可以最終產(chǎn)生我們所需要的文檔。所以最終的文檔=模板+數(shù)據(jù)。下圖或許可以表達(dá)這樣的思想:
          r_Template Engine.gif
          2.1 Template Engine
          Template Engine是一種專門做文件復(fù)用的Engine。其基本思想就是一種Template的文檔復(fù)用思想。但是Template Engine通常還有更多的功能。
            ×支持多種文檔格式的輸出,例如:html , xml , pdf等其他code source
            × 支持腳本語(yǔ)言。為了能讓Template具有某些數(shù)據(jù)處理功能,通常Template Engine還支持一些腳本語(yǔ)言。
          在Java行業(yè),常見(jiàn)的2款Open Source的Template Engine有Velocity和Freemaker


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 黔江区| 子长县| 武清区| 曲阜市| 黄冈市| 德格县| 天台县| 濮阳市| 淳化县| 内丘县| 手机| 临湘市| 巴南区| 松滋市| 常德市| 宣城市| 汤阴县| 分宜县| 巢湖市| 武平县| 河东区| 琼结县| 从化市| 藁城市| 儋州市| 保德县| 安塞县| 深圳市| 叶城县| 许昌市| 谢通门县| 安丘市| 泸水县| 阿尔山市| 盐边县| 海淀区| 石狮市| 柘城县| 旌德县| 石城县| 闽清县|