posts - 176, comments - 240, trackbacks - 0, articles - 7

[导入]Exportor: Visitor模式

Posted on 2005-11-19 11:01 canonical 阅读(337) 评论(0)  编辑  收藏 所属分类: Witrix开发平台

数据导出的功能大致可以分解为三个部分: 1. 从数据源读取一条记录 2. 将一条记录导出为指定格式 3. 循环调用1和2
首 先我们需要一种机制来对外暴露数据源(一种Container)中的数据,Iterator模式恰能满足要求。其次,我们需要一种机制来对一系列数据进行 处理,这对应于Visitor模式。第三,在组合Iterator模式和Visitor模式的处理过程中,我们需要表达出平面表数据集的基本特征。
在witrix平台中,平面表数据导出和转换通过TablePageProcessor对象来完成,
class TablePageProcessor{
 IPageViewer viewer;

 public Object process(ITableVisitor visitor){
  Pager pager = new Pager(viewer, pageSize);
  Iterator it = pager.itemIterator();
  visitor.visitBegin(headers);
  while(it.hasNext()){
   Object row = it.next();
   if(!visitor.visitRow(row))
    break;
  }
  return visitor.visitEnd();
 }
}

interface ITableVisitor{
 void visitBegin(List headers);
 boolean visitRow(Object row);
 Object visitEnd();
}

IPageViewer是暴露平面表数据的标准接口,它通过Pager对象的包装之后可以提供各种Iterator.
ITableVisitor体现了平面表数据的基本特征: header + 一系列row, 存在数据边界(起始与终止)
TablePageProcessor固化了IPageViewer和ITableVisitor的组合过程。
ITableVisitor可以有多种实现,例如CSVBuilder, ExcelBuilder等等。

只有注册用户登录后才能发表评论。


网站导航: