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

          [導入]Exportor: Visitor模式

          Posted on 2005-11-19 11:01 canonical 閱讀(353) 評論(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等等。
          主站蜘蛛池模板: 梅河口市| 姜堰市| 金塔县| 黄大仙区| 栾川县| 浦城县| 阜城县| 资源县| 句容市| 芒康县| 长岛县| 无极县| 雷州市| 沧州市| 甘肃省| 都匀市| 兴安盟| 翁源县| 永新县| 沙田区| 凌海市| 白山市| 海安县| 禹州市| 大方县| 札达县| 河北区| 崇州市| 霍邱县| 太仆寺旗| 淮滨县| 右玉县| 阿城市| 随州市| 呼玛县| 乌海市| 荣昌县| 长丰县| 江川县| 湖北省| 嘉定区|