欢迎来到天天文库
浏览记录
ID:39331035
大小:249.11 KB
页数:15页
时间:2019-07-01
《JAVA开发-接口与抽象开发》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、接口与抽象的应用实例常用的批量导入的开发打开文件读取所有数据导入所有数据打开文件读取一条记录导入一条数据关闭文件关闭文件导完未导完为批量引入接口与抽象通过常用的批量导入方式,可以很好的完成数据的导入,为什么还要引入接口与抽象呢?以下情况是经常发生的:1、数据源的类型和格式改变时2、目标源的类型和格式改变时当然很多人会用COPY+PASTE,然后在恰当的地方进行恰当的修改,来实现恰当的功能。但这样做的工作量是相当大的。比如数据源不是XLS,而是来自另一个数据库,或是SOCKET流。而且可复用性基本为零,维护量在后期也会相当的大。接口与抽象这时就体现了它的优势。批量导入设计
2、的一般框架接口与抽象是一个公用模块不可缺少的设计。对常用的批量导入业务进行抽象,可以发现,类似于Pipe处理,即数据读取,数据导入。再进一步的抽象业务,读取一条记录,导入一条记录,可以使子类的开发更加容易,代码更空易复用和维护。批量导入—数据读取IReadDataAReadDataTextReadDataXlsReadDataBaseReadData批量导入—数据导入IWriteDataAWriteDataTextWriteDataXlsWriteDataBaseWriteData批量导入—接口适配器这里借用适配器这一说法(适配器是用空方法实现接口的类)来处理不同接口间
3、数据格式的匹配。比如读取TEXT文件的map(newInteger(n)=value)和导入XLS文件map(String=value)之间的转换。当各种数据源读取到的Map和写入所要求的数据结构一致时,就可以毫无顾忌的相互导入了。接口适配器的设计在批量导入的实例中,适配器只需要对不同格式数据源进行匹配,使之出来的结果数据结构相同。适配器只需要用抽象类就行了,可以不使用接口。这样,几乎所有类型的数据导入就可以实现了。下面将直接用简洁的代码实现。文本文件XLS文件数据库SOCKET数据源读取设计PublicinterfaceIReadData{publicMapreadD
4、ata();}Map为接口的返回对象,map==null读取结束。用Map作为数据结构可以解决数据列的顺序问题。比如XLS文件title=Value,TEXT文件newInteger(n)=value。这样可以通过中间类实现XLS到TEXT格式的转换,从而实现批量导入。数据源读取设计—TEXT文件PublicclassTextReadDataimplementsIReadDatathrowsException{privateInputStreaminputStream;publicTextReadData(Filefile)throwsException{inputSt
5、ream=newFileInputStream(file);}publicMapreadData(){InputStreamReaderrRead=newInputStreamReader(inputStream);BufferedReaderbRead=newBufferedReader(rRead);Stringmsg=bRead.readLine();if(msg==null)returnnull;Mapmap=newHashMap();String[]msgArray=msg.split(“,”);for(intI=0;I6、){map.put(newInteger(I),msgArray[I]);}returnmap;}}数据源导入设计PublicinterfaceIWriteData{publicvoidwriteData(Mapmap);}1、Map为需要导入的数据数据源导入设计—TEXT文件PublicclassTextWriteDataimplementsIWriteDatathrowsException{privateoutputStreamoutputStream;publicTextWriteData(Filefile)throwsException{outputStream7、=newFileOutputStream(file);}publicvoidwriteData(Mapmap){Objectmsg=null;intlocate=0;StringBuffersb=newStringBuffer();while((msg=map.get(newInteger(locate++)))!=null){if(locate>0)sb.append(“,”);sb.append(msg);}sb.append(“r”);outputStream.write(sb.toString().getBytes());}
6、){map.put(newInteger(I),msgArray[I]);}returnmap;}}数据源导入设计PublicinterfaceIWriteData{publicvoidwriteData(Mapmap);}1、Map为需要导入的数据数据源导入设计—TEXT文件PublicclassTextWriteDataimplementsIWriteDatathrowsException{privateoutputStreamoutputStream;publicTextWriteData(Filefile)throwsException{outputStream
7、=newFileOutputStream(file);}publicvoidwriteData(Mapmap){Objectmsg=null;intlocate=0;StringBuffersb=newStringBuffer();while((msg=map.get(newInteger(locate++)))!=null){if(locate>0)sb.append(“,”);sb.append(msg);}sb.append(“r”);outputStream.write(sb.toString().getBytes());}
此文档下载收益归作者所有