您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 公司方案 > JAVA开发-接口与抽象开发
接口与抽象的应用实例常用的批量导入的开发打开文件读取所有数据导入所有数据打开文件读取一条记录导入一条数据关闭文件关闭文件导完未导完为批量引入接口与抽象通过常用的批量导入方式,可以很好的完成数据的导入,为什么还要引入接口与抽象呢?以下情况是经常发生的:1、数据源的类型和格式改变时2、目标源的类型和格式改变时当然很多人会用COPY+PASTE,然后在恰当的地方进行恰当的修改,来实现恰当的功能。但这样做的工作量是相当大的。比如数据源不是XLS,而是来自另一个数据库,或是SOCKET流。而且可复用性基本为零,维护量在后期也会相当的大。接口与抽象这时就体现了它的优势。批量导入设计的一般框架接口与抽象是一个公用模块不可缺少的设计。对常用的批量导入业务进行抽象,可以发现,类似于Pipe处理,即数据读取,数据导入。再进一步的抽象业务,读取一条记录,导入一条记录,可以使子类的开发更加容易,代码更空易复用和维护。批量导入—数据读取IReadDataAReadDataTextReadDataXlsReadDataBaseReadData批量导入—数据导入IWriteDataAWriteDataTextWriteDataXlsWriteDataBaseWriteData批量导入—接口适配器这里借用适配器这一说法(适配器是用空方法实现接口的类)来处理不同接口间数据格式的匹配。比如读取TEXT文件的map(newInteger(n)=value)和导入XLS文件map(String=value)之间的转换。当各种数据源读取到的Map和写入所要求的数据结构一致时,就可以毫无顾忌的相互导入了。接口适配器的设计在批量导入的实例中,适配器只需要对不同格式数据源进行匹配,使之出来的结果数据结构相同。适配器只需要用抽象类就行了,可以不使用接口。这样,几乎所有类型的数据导入就可以实现了。下面将直接用简洁的代码实现。文本文件XLS文件数据库SOCKET数据源读取设计PublicinterfaceIReadData{publicMapreadData();}Map为接口的返回对象,map==null读取结束。用Map作为数据结构可以解决数据列的顺序问题。比如XLS文件title=Value,TEXT文件newInteger(n)=value。这样可以通过中间类实现XLS到TEXT格式的转换,从而实现批量导入。数据源读取设计—TEXT文件PublicclassTextReadDataimplementsIReadDatathrowsException{privateInputStreaminputStream;publicTextReadData(Filefile)throwsException{inputStream=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;ImsgArray.length;I++){map.put(newInteger(I),msgArray[I]);}returnmap;}}数据源导入设计PublicinterfaceIWriteData{publicvoidwriteData(Mapmap);}1、Map为需要导入的数据数据源导入设计—TEXT文件PublicclassTextWriteDataimplementsIWriteDatathrowsException{privateoutputStreamoutputStream;publicTextWriteData(Filefile)throwsException{outputStream=newFileOutputStream(file);}publicvoidwriteData(Mapmap){Objectmsg=null;intlocate=0;StringBuffersb=newStringBuffer();while((msg=map.get(newInteger(locate++)))!=null){if(locate0)sb.append(“,”);sb.append(msg);}sb.append(“\r\n”);outputStream.write(sb.toString().getBytes());}}适配器设计—默认类PublicclassDefaultAdapterimplementsIDataAdatper{publicMapchangeDataFormat(Mapmap){returnmap;}}这个类没有只是直接返回,可以用于文件复制或是读取后结构相同的数据源之间导入。批量导入最后设计PublicclassDataImport{publicvoidimportData(IReadDataiReadData,IWriteDataiWriteData,IDataAdapter)throwsnewException{Mapmap=null;while((map=iReadData.readData())!=null){map=IDataAdapter(map);iWriteData.writeData(map);}}}结束语以上所有代码的开发源于项目中WLAN数据的批量导入与数据导出的简化,实际的批量导入中,需要进行各种业分析,如果将各种业务引入接口与抽象,这样数据的导入将更加易维护。另外,批量导入中也要对异常进行处理,所以还需要对异常的处理引入接口与抽象。希望能抛砖引玉。谢谢大家
本文标题:JAVA开发-接口与抽象开发
链接地址:https://www.777doc.com/doc-1358145 .html