写了一段“导出Excel报表”的代码。有些看法不知道对否,请大家指教!
由于某些简单报表的表头、标题、表体可以通用。另外一些复杂的表报无法通用。
1.设计接口(ExportExcel)抽象所有报表的导出
2.简单报表设计一个抽象类(SimpleExportExcel implements ExportExcel )实现通用性导出。
3.复杂报表直接implemets ExportExcel .
代码简化显示如下:
/*通用报表*/
public interface ExportExcel{
public void writeTH(String th);//写表头 @param 报表表头
public void writeTB(List tb);//写表体 @param 报表表体
public void writeTitle(String title);//写标题@param 报表标题
public void export(Report report);//画报表 @param待导出报表
}
/*简单报表*/
public abstract class SimpleExportExcel implements ExportExcel {
public void writeTH(String th){
//@todo 通用表头的实现
}
public void writeTB(List tb);//无法实现通用,交给子类实现
public void writeTitle(String title){
//@todo 通用标题的实现
}
public void export(Report report){
writeTH(report.getTh());
writeTB(report.getTB());
writeTitle(report.getTitle());
}
}
/*简单报表实现例:VIP用户报表*/
public class VipExportExcel extends SimpleExportExcel {
public void writeTB(List tb){
//@todo 通用表体的实现
}
}
/*复杂报表实现例:客户业务报表*/
public class CustExportExcel implements ExportExcel {
public void writeTH(String th){
//@todo 客户业务报表表头的实现
}
public void writeTB(List tb){
//@todo 客户业务报表表体的实现
}
public void writeTitle(String title){
//@todo 客户业务报表标题的实现
}
public void export(Report report){
writeTH(report.getTh());
writeTB(report.getTB());
writeTitle(report.getTitle());
}
}
/*应用实例*/
public static void main(String args[]){
……
Excel excel = ExportFactory.getExcel("CustExportExcel");
excel.export();
……
}
在论坛上经常有看到Abstract class 与 interfact的讨论。在无法抉择时是否可以同时使用Abstract class 与 interfact,interfact作为功能的抽象,Abstract class作为通用性的实现。