网站首页
JSP空间
动态资讯
开源项目
技术文档
资源下载
J2EE资源
客户论坛
在线支付
 
  技术文档>>JAVA>>新手入门>>基础入门>查看文档  
  求同存异——java模式系列谈之模板方法     
  文章作者:未知  文章来源:水木森林  
  查看:121次  录入:管理员--2007-11-17  
 
一、引言



  不可否认,编代码、写程序,编的写的其实是人的思想;而设计模式更是这种思想的总结。“求同存异”是周总理的著名外交思想之一,“求同”就是寻求相同的地方,并且来解决它;“存异”就是搁置不同的地方,搁置的意思不是不解决,而是留待后面去解决。

在设计模式中,模板方法正是体现了这种思想的典范。

模板方法,定义一个操作中算法的骨架,将一些步骤的执行延迟到其子类中。其中,这些在父类中实现了的步骤就是所谓的“同”,“求同”就是在父类中把相同的功能先实现;而那些延迟到子类中的步骤就是所谓的“异”,“存异”就是把不同在父类中遗留下来,到子类中去各个实现。

在实际的工作中,经常会遇到这样的情况:有一序列的功能相同的模块,这些模板有很多相同或相似的步骤;当然,也有一个或两个不同的步骤。

如,有在线购物功能的网站,经常要对商品进行各种各样的排名:按商品的点击率排名、按商品的购买率排名、按商品的入站时间排名、按商品的类别进行的搜索等等。这些都是一些搜索功能,功能完全相同;不同的要么是搜索的算法、要么是搜索的数据表不同。

我们知道,如果采用struts模式的开发方法,那么我们所有的这些功能的实现都是在一个继承了action类的public actionforward execute ( actionmapping actionmapping, actionform actionform, httpservletrequest request, httpservletresponse response)中实现,这里需要实现的功能有:取得进行搜索所需要的各种条件,进行搜索算法、处理搜索结果。在这里,取得搜索所需的条件和处理搜索结果的算法是一样的,他们将产生相同的代码。不同的只是进行搜索的算法。很明显,相同的代码是需要我们进行重用的。

那么我们该怎么重用呢?



二、从一段代码谈起



首先需要说明的是:这段代码是一段反面的代码,或者说是一段坏的代码。每个人看了都会觉得不可思议,但这确确实实是我们工作中遇到的代码:



public class tospeaction extends action {

   public arraylist       sizerangelabel  = null;

   public actionforward execute ( actionmapping actionmapping, actionform actionform, httpservletrequest request, httpservletresponse response) {

……

          if ("save".equalsignorecase (action)) {

                 stringbuffer productidstr = new stringbuffer ( );

                 stringbuffer specistr = new stringbuffer ( );

                 specimanager.getinstance ( ).saveheaddata (actionform, request, productidstr, specistr, "specification");

                 specid = specistr.tostring ( );

                 productid = productidstr.tostring ( );

                 form.set ("productid", productid);

                 form.set ("specid", specid);

          }

……

          //grid

          if (tab.equals ("0")) { //spec

                 griddatasummary gdsmy = new griddatasummary (specid);

                 gdsmy.specbasedata.settransform (transform);

                 gdsmy.specbasedata.setprevtransform (prevtransform);

                 gdsmy.specbasedata.settextrangesizesrc ((string) form.get ("sizerangeidesc"));

                 gdsmy.specbasedata.setsortpomstr (sortpomstr);

                 gdsmy.specbasedata.setgraderuleid ((string) form.get ("ddlgulevule"));

                 gdsmy.specbasedata.setsizechangeflag ((string) form.get ("sizechangeflag"));

                 gdsmy.specbasedata.sethidepomcode ("hide".equalsignorecase (hidepomcode) ? true : false);

 







                 if ("".equalsignorecase (action)) {

                        load (request, gdsmy);

                 } else if ("load".equalsignorecase (action)) {

                        //grid data

                        load (request, gdsmy);

                 } else if ("save".equalsignorecase (action)) {

                        //save measure table data

                        save (request, gdsmy, form);

                       

                        load (request, gdsmy);

                 } else if ("refgrid".equalsignorecase (action)) {

                       

                        string xmldata = refgrid (specxmlstr, gridmodel, gdsmy);

                        loggeragent.debug ("grid business done     ....../nthe xml data is " + xmldata);

                        request.setattribute ("xmlstring", xmldata);

 







                        //          判定弹出用户自定义排序窗体,并作业务上的处理

                        if (griddataconstant.str_tru
 
 
上一篇: 浅谈java中的存储空间类型    下一篇: 全面挖掘java excel api 使用方法(1)
  相关文档
struts实时生成excel文件下载 11-17
struts构建文件上传(六) 11-17
java 加密 11-17
用netbeans平台开发j2me游戏实例讲解2 11-17
rmi调用模版 11-17
浅论手机游戏发展趋势与相关 j2me api 11-17
实例讲解如何读取和处理xm的配置文件 (1) 02-22
java核心代码例程之:datagramserverdemo.java 11-17
再谈客户端的 java 技术 11-16
使用jdbc建立各种数据库的连接方式集萃 11-16
代码最优化.net中的内存管理 11-17
.net 的 msmq 异步调用全过程分析 11-17
多网口的ipnetworkmultipathingfailover 11-16
选取合适的dhtml grid方案 11-17
spring framework中的aop之around通知 11-16
xml带来的好处 11-17
java基础 三步学会java socket编程(二) 11-16
oop java:beans中的一个小小的事物逻辑 11-17
hibernate入门 - 包作用详解 11-17
javascript实例教程(12) 鼠标移过时报警 11-16
返回首页 | 关于我们 | J网章程 | JSP空间合租 | 客服中心 | 免责声明 | 常见问题 | 参观机房
本站主机空间代理至厦门市华众网络科技有限公司
《中华人民共和国增值电信业务经营许可证》
编号:闽B2-20050079
@2005-2008福建JSP技术网 版权所有 闽ICP备05000928号
厦门(总部):13616026886 福州:0591-87655121
邮箱:admin@fjjsp.com 站长QQ,点击这里给我发消息