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

          [導入]Exportor: Visitor模式

          Posted on 2005-11-19 11:01 canonical 閱讀(347) 評論(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等等。
          主站蜘蛛池模板: 沽源县| 定安县| 余庆县| 克拉玛依市| 郑州市| 辽阳县| 本溪| 临武县| 图木舒克市| 连州市| 栾城县| 栾川县| 开封市| 嘉禾县| 甘南县| 凌海市| 安吉县| 遂川县| 同心县| 黔江区| 乌拉特后旗| 凌海市| 揭阳市| 鹤峰县| 濉溪县| 平罗县| 巴马| 开鲁县| 台州市| 大新县| 察雅县| 晋中市| 铁力市| 宜城市| 平乐县| 永胜县| 华池县| 乐业县| 宾阳县| 黄梅县| 泸溪县|