﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-2001年10月2日-文章分类-其他技术</title><link>http://www.blogjava.net/thomaschen75/category/1124.html</link><description>在这天，我选择了生命中的另一半。:::执子之手，与子偕老:::</description><language>zh-cn</language><lastBuildDate>Wed, 28 Feb 2007 11:30:15 GMT</lastBuildDate><pubDate>Wed, 28 Feb 2007 11:30:15 GMT</pubDate><ttl>60</ttl><item><title>Template 技术</title><link>http://www.blogjava.net/thomaschen75/articles/3623.html</link><dc:creator>我是一只小小鸟，片刻的小憩，是为了更好的飞翔......</dc:creator><author>我是一只小小鸟，片刻的小憩，是为了更好的飞翔......</author><pubDate>Fri, 22 Apr 2005 11:47:00 GMT</pubDate><guid>http://www.blogjava.net/thomaschen75/articles/3623.html</guid><wfw:comment>http://www.blogjava.net/thomaschen75/comments/3623.html</wfw:comment><comments>http://www.blogjava.net/thomaschen75/articles/3623.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/thomaschen75/comments/commentRss/3623.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/thomaschen75/services/trackbacks/3623.html</trackback:ping><description><![CDATA[<P>Template技术可以很大限度的重用一些资源。其基本思想是将公用资源抽取出来进行复用，将变化资源剥离出去，最后二者融合在一起，共同作用产生最后的结果。常见的Template技术用在2个方面，一个是程序代码Template－即我们常说的Template设计模式；另一个方面是文档复用－即常见的TemplateEngine，ReportEngine。<BR><BR><STRONG>1. Template设计模式<BR>1.1 Template设计模式<BR></STRONG>Tempate设计模式一种非常有用的设计模式，人们通常使用他构建某个算法的骨架。将算法中易变的部分抽象成抽象方法（或者提供默认实现，子类可以重载）留待子类来实现。对于子类而言，只是需要重载父类中抽象方法。这样整个算法的框架就不会发生变化。同时减少了子类的代码量。请参看如下类图：<BR></P>
<P align=left><IMG height=319 alt="o_Desing Pattern-Template.gif" src="http://www.blogjava.net/images/blogjava_net/thomaschen75/1125/o_Desing%20Pattern-Template.gif" width=455 border=0><BR>从上图可以看出来，AbstractClass的templateMethod()方法规定了整个算法的框架，其中定义了2个抽象方法operation1()，operation2()留待子类来实现。ConceteClassA，ConcreteClassB这2个子类继承AbstractClass，独立的分别来实现抽象父类中定义的2个抽象方法。这样当我们实例化不同ConceteClassA，ConcreteClassB的实例，就可以得到不同的算法运行结构。<BR><BR><STRONG>1.2 Template设计模式扩展</STRONG><BR>当我们将Template设计模式和CallBack设计模式一起来使用的，可以现实更加灵活的算法，流程处理。Spring框架将这种设计模式的作用发挥到了及至。我们来看其中的一个例子：如何利用这种设计模式来简化Hibernate的使用。参看代码片断：<BR></P>
<P align=left><IMG title="Spring HibernateTemplate-execute()方法" height=449 alt=r_SpringHibernateTemplate.gif src="http://www.blogjava.net/images/blogjava_net/thomaschen75/1116/r_SpringHibernateTemplate.gif" width=640 border=0><BR>在使用Hibernate的时候，一般的过程是首先获取session 对象，然是使用session去操作数据库。最后还要处理session的生命周期。为了简化这种操作，HibernateTemplate的execute()方法中管理了这个session的声明周期。将数据库操作放在实现HibernateCallback接口的类中实现。这样以来HibernateCallback的实现类只需要使用session只做数据库相关的操作，而不需要去处理Session之类的其他问题。<BR><BR><STRONG>2.&nbsp;文档复用<BR></STRONG>在文档中，通常有许多的内容是一样的，只是其中有一部分内容不太一样。如何能有效的复用文档中的重复内容呢？一种常见的思路是：将文档中的重复部分做成模板，将文档中变化的部分作为数据抽象出来，在真正需要生成文档的时候，将二者merge起来。这样就可以最终产生我们所需要的文档。所以最终的文档＝模板+数据。下图或许可以表达这样的思想：<BR><IMG title="Template Engine的观念" height=188 alt="r_Template Engine.gif" src="http://www.blogjava.net/images/blogjava_net/thomaschen75/1125/r_Template%20Engine.gif" width=393 border=0><BR><STRONG>2.1 Template Engine</STRONG><BR>Template Engine是一种专门做文件复用的Engine。其基本思想就是一种Template的文档复用思想。但是Template Engine通常还有更多的功能。<BR>&nbsp; ×支持多种文档格式的输出，例如:html , xml , pdf等其他code source<BR>&nbsp; × 支持脚本语言。为了能让Template具有某些数据处理功能，通常Template Engine还支持一些脚本语言。<BR>在Java行业，常见的2款Open Source的Template Engine有Velocity和Freemaker<BR><BR></P><img src ="http://www.blogjava.net/thomaschen75/aggbug/3623.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/thomaschen75/" target="_blank">我是一只小小鸟，片刻的小憩，是为了更好的飞翔......</a> 2005-04-22 19:47 <a href="http://www.blogjava.net/thomaschen75/articles/3623.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>