知识大全 设计模

Posted 文件

篇首语:好学而不勤问非真好学者。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 设计模相关的知识,希望对你有一定的参考价值。

  近段要实现一个上传excel文件到服务器 并把excel文件的数据导入到数据库表中的功能     excel文件有两种格式 对应数据库两张表 我先实现了其中一种excel格式式的上传和导入数据 上传的功能是一样的 没什么好说的 不同的是两种excel文件格式不一样 对应的数据库表的字段也不一样 怎么办呢?    开始的时候 我先做了一个excel文件的功能 做另一个很相似了 运用c/p大法就搞定了:)     代码是这样的     action中:  CityDayService cds = new CityDayServiceImpl();  ImpExcelData impExcelData = new ImpExcelData(filePath );   //这里从excel文件中取出数据  try    List list = impExcelData getData();                  //放进list中 用的是jxl         List<CityDay> sameList = cds sameList(list);//这里有不同

  //boolean isOk = cds checkExcel(list);   if (sameList size()> )     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(); 

  另一种格式的excel文件对应的action是这样的

  /* 导入表 */

    ZhbTCityDayForecastService cds = new ZhbTCityDayForecastServiceImpl();/////////////////  ImpExcelData impExcelData = new ImpExcelData(filePath );  try    List list = impExcelData getData();         List<ZhbTCityDayForecast> sameList = cds sameList(list);////////////////////   if (sameList size()> )     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(); 

      业务层:

     public interface CityDayService  public List findByCityAndDate(String city Date date);  public void deleteSame(List excelDataList);  public void add(List excelDatalist);  public List sameList(List excelDatalist);        和     public interface ZhbTCityDayForecastService  public List findByCityAndDate(String city Date date);  public void deleteSame(List excelDataList);  public void add(List excelDatalist);  public List sameList(List excelDatalist);  

  业务层实现类:

       public class CityDayServiceImpl implements CityDayService

  public List findByCityAndDate(String city Date date)   CityDayDAO cdd = new CityDayDAOImpl();  return cdd findByCityAndDate(city date); 

  public void add(List excelDatalist)  Session session = HibernateSessionFactory getSession(); Transaction tran = session beginTransaction();  List<CityDay> newList = new ArrayList();  for (int i = ; i < excelDatalist size(); i++)    HashMap map = (HashMap) excelDatalist get(i);   String strDate = map get( ) + ;   Date date;   try     date = new SimpleDateFormat( yyyy MM dd ) parse(strDate);    CityDayDAO cdd = new CityDayDAOImpl();    CityDay cd = new CityDay();    cd setDate(date);    cd setCity(map get( ) + );    cd setPollutionIndeces(new Integer(map get( )+ ));    cd setMainPollutant(map get( ) toString());    cd setGrade(map get( ) toString());    cd setStatus(map get( ) toString());    cdd saveOrUpdate(cd);   catch (ParseException e)     tran rollback();    e printStackTrace();  

      mit(); 

  public void deleteSame(List excelDataList)

  CityDayDAO cdd = new CityDayDAOImpl();  boolean result = true;  List<CityDay> list = new ArrayList<CityDay>();  for (int i = ; i < excelDataList size(); i++)    HashMap map = (HashMap) excelDataList get(i);   String city = map get( ) + ;   String strDate = map get( ) + ;   Date date;   try     date = new SimpleDateFormat( yyyy MM dd ) parse(strDate);    List onelist = cdd findByCityAndDate(city date);    for(int j= ;j<onelist size();j++)     list add((CityDay)onelist get(j));       catch (ParseException e)     // TODO Auto generated catch block    e printStackTrace();  

    for(int j= ;j<list size();j++)   CityDay cd = (CityDay)list get(j);   System out println( 要删除的数据有:\\n + city: +cd getCity()+ date: + cd getDate());    cdd delete(list); 

  public List<CityDay> sameList(List excelDatalist)   CityDayDAO cdd = new CityDayDAOImpl();  boolean result = true;  List<CityDay> list = new ArrayList<CityDay>();  for (int i = ; i < excelDatalist size(); i++)    HashMap map = (HashMap) excelDatalist get(i);   String city = map get( ) + ;   String strDate = map get( ) + ;   Date date;   try     date = new SimpleDateFormat( yyyy MM dd ) parse(strDate);    List onelist = cdd findByCityAndDate(city date);    for(int j= ;j<onelist size();j++)     list add((CityDay)onelist get(j));       catch (ParseException e)     // TODO Auto generated catch block    e printStackTrace();  

    for(int j= ;j<list size();j++)   CityDay cd = (CityDay)list get(j);   System out println( 重复的数据有:\\n + city: +cd getCity()+ date: + cd getDate());    return list; 

      和

  public class ZhbTCityDayForecastServiceImpl implements ZhbTCityDayForecastService

  public List findByCityAndDate(String city Date date)   ZhbTCityDayForecastDAO cdd = new ZhbTCityDayForecastDAOImpl();  return cdd findByCityAndDate(city date); 

  public void add(List excelDatalist)  Session session = HibernateSessionFactory getSession(); Transaction tran = session beginTransaction();  List<CityDay> newList = new ArrayList();  for (int i = ; i < excelDatalist size(); i++)    HashMap map = (HashMap) excelDatalist get(i);   String strDate = map get( )+ +map get( )+ +map get( ) + ;   Date date;   try     date = new SimpleDateFormat( yyyy MM dd ) parse(strDate);    ZhbTCityDayForecastDAO cdd = new ZhbTCityDayForecastDAOImpl();    ZhbTCityDayForecast cd = new ZhbTCityDayForecast();    cd setCity(map get( ) + );    cd setDate(date);    cd setPollutionMin(new Integer(map get( )+ ));    cd setPollutionMax(new Integer(map get( )+ ));    cd setMainPollutant(map get( )+ );    cd setGrade(map get( ) toString());    cd setStatus(map get( ) toString());    cdd saveOrUpdate(cd);   catch (ParseException e)     tran rollback();    e printStackTrace();  

      mit();  public void deleteSame(List excelDataList)

  ZhbTCityDayForecastDAO cdd = new ZhbTCityDayForecastDAOImpl();  boolean result = true;  List<ZhbTCityDayForecast> list = new ArrayList<ZhbTCityDayForecast>();  for (int i = ; i < excelDataList size(); i++)    HashMap map = (HashMap) excelDataList get(i);   String city = map get( ) + ;   String strDate = map get( )+ +map get( )+ +map get( ) + ;   Date date;   try     date = new SimpleDateFormat( yyyy MM dd ) parse(strDate);    List<ZhbTCityDayForecast> onelist = cdd findByCityAndDate(city date);    for(int j= ;j<onelist size();j++)     list add((ZhbTCityDayForecast)onelist get(j));       catch (ParseException e)     // TODO Auto generated catch block    e printStackTrace();  

    cdd delete(list); 

  public List<ZhbTCityDayForecast> sameList(List excelDatalist)   // TODO Auto generated method stub  ZhbTCityDayForecastDAO cdd = new ZhbTCityDayForecastDAOImpl();  List<ZhbTCityDayForecast> list = new ArrayList<ZhbTCityDayForecast>();  for (int i = ; i < excelDatalist size(); i++)    HashMap map = (HashMap) excelDatalist get(i);   String city = map get( ) + ;   String strDate = map get( )+ +map get( )+ +map get( ) + ;   Date date;   try     date = new SimpleDateFormat( yyyy MM dd ) parse(strDate);    List onelist = cdd findByCityAndDate(city date);       for(int j= ;j<onelist size();j++)     list add((ZhbTCityDayForecast)onelist get(j));       catch (ParseException e)     // TODO Auto generated catch block    e printStackTrace();       return list;  

  这样做完后 自己感觉很不满意 因为两个相似的功能 写了两遍代码:两个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 = xxx datacenter upload service CityDayServiceImpl ;

  private static final String foreCastService = 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 );  try    List list = impExcelData getData();         List<CityDay> sameList = cds sameList(list);//这里有不同

  //boolean isOk = cds checkExcel(list);   if (sameList size()> )     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了

cha138/Article/program/Java/gj/201311/27596

相关参考

在设计模拟检测系统时,常用于抑制差模干扰的方法主要有以下几种:()

在设计模拟检测系统时,常用于抑制差模干扰的方法主要有以下几种:()A、浮空或隔离B、采用电流传输方式或滤波C、平衡传输D、采用屏蔽线或双绞线传输参考答案:BD

铸造金属基托怎样制作

铸造金属基托的方法主要有两种:带模铸造法和脱模铸造法,带模法更精密准确,用于复杂的大型支架。  带模铸造法:①在观测器上确定就位道,在模型上绘出义齿设计图。②在网状支架的倒凹区需缓冲处填蜡。③将模型放

知识大全 .NET反射、委托技术与设计模式

.NET反射、委托技术与设计模式  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  反射技术与设计模

知识大全 Java模式设计之单例模式(一)

Java模式设计之单例模式(一)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  作为对象的创建模

知识大全 数据结构与算法设计自学考试大纲[6]

第十章数据结构程序设计示例  本章通过具体的实例介绍了数据结构的实验过程包括对问题的分析数据结构的确定与建立算法的设计与实现程序的编制与调试实验报告的编制等本章特别强调了程序的规范说明和建立数据结构模

知识大全 关于Java23种设计模式的有趣见解[2]

关于Java23种设计模式的有趣见解[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  装饰模

知识大全 设计模式-快餐简解-模板方法模式

  【模板方法模式应用场景举例】  比如在玩极品飞车这款游戏每辆车都有显示速度的仪表盘但有可能A车显示的是蓝色的仪表盘B车显示的是红色的仪表盘分析中可以发现他们都有车速度的值但显示的方式不太一样其实模

取印模常用的是什么材料,有毒吗

印模材料有藻酸盐印模材料、硅橡胶印模材料、弹性印模材料,目前临床上最常用的是藻酸盐印模材料。藻酸盐印模材料有粉状制剂和糊状制剂两种。  (1)粉状制剂:以一定量配制好的,临床应用时,以水调和即可应用,

属于模件功能测试内容的选项,除IO模件通道精度、电源模件功能测试外,还有(),的测试。

属于模件功能测试内容的选项,除I/O模件通道精度、电源模件功能测试外,还有(),的测试。A、逻辑处理功能B、通讯功能确认C、系统组态功能D、程序软件下载功能参考答案:BCD

属于模件功能测试内容的选项,除IO模件通道精度、电源模件功能测试外,还有(),的测试。

属于模件功能测试内容的选项,除I/O模件通道精度、电源模件功能测试外,还有(),的测试。A、逻辑处理功能B、通讯功能确认C、系统组态功能D、程序软件下载功能参考答案:BCD