捷凌网安JAVA频道
捷凌IT教育
首页 资讯动态 认证考试 新手入门 核心技术 高级技术 J2EE J2ME 开源技术 其他技术 论坛
 您现在的位置: 捷凌网安 >> Java >> 高级技术 >> 设计模式 >> 正文
设计模式一些思索

作者:佚名 责任编辑:左决 点击数: 更新时间:2008-4-30 3:11:25

   这样做完后,自己感觉很不满意.因为两个相似的功能,写了两遍代码:两个action,service,还有两个页面.很笨.
    如果以后需求增加,再写其它的excel格式岂不是很惨.又要用cp法了.初步的思路是只一个action和一个页面.
    经过思索,发现,只有service层的
    public void add(List excelDatalist);
    public List sameList(List excelDatalist);
    public void deleteSame(List excelDataList);
    三个方法是不同的.

    那么在action中可以根据参数生成不同的service,执行不同的service中的service方法.可以用工厂方法生产出不同的service.思路有了,开干.

    首先把这三个方法提到一个接口里来.

    public interface CommonUploadService {
  public void add(List excelDatalist);
  public List sameList(List excelDatalist);
  public void deleteSame(List excelDataList);
   }

    原为的service就变成这样

  public interface CITyDayService extends CommonUploadService{
  public List findByCityAndDate(String cITy,Date date);
   }

   public interface ZhbTCITyDayForecastService extends CommonUploadService{
  public List findByCityAndDate(String cITy,Date date);
   }

    实现类不用变.

    工厂方法:

 public class UploadServiceFactory {

 private static CommonUploadService cus;

 private static final String cityDayService = "com.xxx.datacenter.upload.service.CITyDayServiceImpl";

 private static final String foreCastService = "com.xxx.datacenter.upload.forecast.service.CITyDayServiceImpl";

 private UploadServiceFactory() {
 }

 public static CommonUploadService getInstance(String type) {
  try {
   if ("daily".equals(type)) {
    Class cls = Class.forName(cITyDayService);
    cus = (CommonUploadService) cls.newInstance();
   }
   if ("forecast".equals(type)) {
    Class cls = Class.forName(foreCastService);
    cus = (CommonUploadService) cls.newInstance();
   }
  } catch (Exception e) {
   e.printStackTrace();
  }
  return cus;
 }
  }

   改造后的action

  /* 导入表 */
 // CityDayService cds = new CITyDayServiceImpl();//这里有不同 可以用工厂方法,根据参数type不同构造出
     String type = request.getParameter("type");
     CommonUploadService cds =  UploadServiceFactory.getInstance(type);
  ImpExcelData impExcelData = new ImpExcelData(filePath, 0);
  try {
   List list = impExcelData.getData();
         List<CITyDay> sameList = cds.sameList(list);//这里有不同

   //boolean isOk = cds.checkExcel(list);
   if (sameList.size()>0) {
    request.setAttribute("sameList", sameList);
    request
      .setAttribute("echo",
        "以下数据有重复,是否覆盖");
    return mapping.findForward("upload");
   } else {

    cds.add(list);//这里有不同
   }
   System.out.print("");
  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }

     这样一个action就可以搞定了.
    如果以为要增加新格式的excel文件,只实现CommonUploadService方法,改造一下工厂类就ok了.

    总结:
    以后遇到功能类似的需求,可以把接口相同,但实现不同的方法提到共的提口来.然后用工厂方法生成不同的实例.
    运用面向对象的多态的性能.就可以简化开发.
    设计模式关暂在于实践.光看书本是不行的.有什么不对的地方,请多多指点.

上一页  [1] [2] [3] 

  • 上一篇文章:

  • 下一篇文章:
  •  
     最进更新
    普通文章J2SE实现windows读取网卡的物05-11
    普通文章Scala—Java的避难所之main(05-11
    普通文章Spring数据源的灵活配置巧应05-11
    普通文章Spring 与 Log4J 进行动态日05-11
    普通文章Heritrix的多线程ToeThread和05-11
    普通文章应用spring示例开发网站构思05-11
    普通文章Spring 数据源配置与应用05-11
    普通文章Spring中的四种声明式事务的05-11
    普通文章Hibernate+Spring搞定Clob、05-11
    普通文章Hibernate的映射关联关系05-11
     
     推荐文章
    推荐文章Java技术开源搜索引擎04-30
    推荐文章Eclipse中建立自己的JUnit测04-30
    推荐文章Eclipse 3.3上安装jadclipse04-30
    推荐文章spring 编程入门十大问题解答04-30
    推荐文章Java编程中Spring的一些负面04-30
    推荐文章Java应用中Hibernate对多表关04-30
    推荐文章关于hibernate的缓存和CRUD04-30
    推荐文章基于Struts1.2的动态多文件上04-30
    推荐文章演示Struts2实现简单上传代码04-30
    推荐文章J2EE学习笔记--Struts初步认04-30
     
     热点文章
    普通文章J2SE实现windows读取网卡的物05-11
    普通文章Scala—Java的避难所之main(05-11
    普通文章Spring数据源的灵活配置巧应05-11
    普通文章Spring 与 Log4J 进行动态日05-11
    普通文章Heritrix的多线程ToeThread和05-11
    普通文章应用spring示例开发网站构思05-11
    普通文章Spring 数据源配置与应用05-11
    普通文章Spring中的四种声明式事务的05-11
    普通文章Hibernate+Spring搞定Clob、05-11
    普通文章Hibernate的映射关联关系05-11

    | 设为首页 | 加入收藏 | 联系站长 | 广告服务 | 友情链接 | 版权申明 | 网站地图 |

    在线交流 捷凌网安主群:51649627
    Copyright 2007-2008 © 捷凌网安. All rights reserved.
    备案序号:蜀ICP备08001812号