亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

談談設計模式中的Iterator迭代器

2019-11-18 12:17:34
字體:
來源:轉載
供稿:網友

  在Pet Store中的CatalogDao使用了DAO模式,從而完成Fast-Lane Reader模式,以便能快速的輸出數據庫元素
  
  列表,同時使用for page-by-page iteration完成每頁的輸出顯示。
  
  在CatalogDAOImpl 中基本返回的是Page,也就是說,在CatalogDAOImpl的具體JDBC數據庫查詢時,就將Page功
  
  能融入其中,從而一步到位的完成輸出顯示。
  
  但在實際系統應用中,我們都有用戶權限約束,也就是說,并不是每條數據庫記錄都能被顯示輸出,有些用戶
  
  就只能看到他被授權看到的的記錄。
  
  Jive中的Iterator模式就很好的解決了這個問題,Jive中使用PRoxy模式完成用戶權限級別的驗證,同時為了更
  
  快的獲得數據庫記錄和節約內存,Jive專門建立了自己的Iterator模式,這些一開始讓人迷惑,直接使用
  
  Collection的Iterator不是更好,雖然簡單方便了,但是前提是在內存中要先開辟一塊Collection內存,假如
  
  數據庫記錄很大,將耗費很多內存,致使系統癱瘓(細節討論見
  http://www.jdon.com:81/jive/thread.jsp?forum=16&thread=302)
  
  Jive的Iterator不只是傳遞了數據庫指針,而且加載了權限驗證功能,因此,這一模式是實用可行的,那么在
  
  我們自己的EJB應用中如何綜合這兩個系統的模式優點?
  
  這其中應該有很多中間方案可行,假如你有愛好可以貼出你的想法,我目前采取的是DAO模式和Jive的Iterator
  
  模式集合,也就是說,在自己的EJB中不直接返回Page 而是返回Iterator,這個Iterator是類似Jive中的
  
  DatabaSEObjectIterator。
  
  簡單的說,由于Jive不是EJB架構,所以,將Jive中的訪問數據庫段用DAO模式替代,其他都可以照搬Jive的
  
  Iterator模式,關于前端JSP頁面的分頁輸出,這時可以參考Pet Store的page-by-page iteration模式,也就
  
  是說,根據Iterator模式再拓展寫Page,結構和功能類似Pet store的Page.
  
  這里只提供一個大體思路,假如要寫透徹真是很長,看看平常我們以前用asp php做的數據庫查詢分頁的簡單功
  
  能蘊含這么多新的思想,其實這些思想也是在ASP PHP應付大數據庫量失敗的總結,所以軟件質量控制是顯得多
  
  么重要。
  
  
  
  我用Iterator的程序代碼:
  public interface DataListIterator
  {
  /**
  * 功能類似于java.util.Iterator.hasNext()
  *
  * @return 假如有下一個元素,返回true
  * @throws Exception
  */
  public boolean hasNext() throws Exception;
  
  /**
  * 功能類似于java.util.Iterator.next(),但是返回的是數據庫查詢的結果
  * 的字段值字符串數組。
  *
  * @return String[] 字段值字符串數組
  * @throws Exception
  */
  public String[] next() throws Exception;
  }
  
  
  
  public interface DataList{
  
  /**
  * 取出指定位置查詢結果中的字段值,放到一個字符串數組中并返回。
  * 功能類似于java.util.List.get(int)
  *
  * @param index 查詢結果的索引
  * @return String[] 結果中的字段值數組
  *
  * @throws Exception
  */
  public String[] get(int index) throws Exception;
  
  /**
  * 檢查查詢結果的集和是否為空集合
  *
  * @return boolean true表示空集合
  * @throws Exception
  */
  public boolean isEmpty() throws Exception;
  
  /**
  * 檢查是否還有下一個查詢結果
  *
  * @return boolean true表示有下一個
  * @throws Exception
  */
  public boolean hasNext() throws Exception;
  
  /**
  * 檢查在指定位置上是否有查詢結果
  *
  * @param index 查詢結果的索引
  * @return boolean true表示有查詢結果
  * @throws Exception
  */
  public boolean isElementExist(int index) throws Exception;
  
  /**
  * 把游標放到指定的位置上,功能類似于java.sql.ResultSet.absolute(int)
  *
  * @param index 指定的位置,從0開始
  * @return boolean true表示操作成功
  * @throws Exception
  */
  public boolean absolute(int index) throws Exception;
  
  /**
  * 把游標放到查詢結果的最前面,功能類似于java.sql.ResultSet.beforeFirst()
  *
  * @throws Exception
  */
  public void beforeFirst() throws Exception;
  
  /**
  * 把游標放到查詢結果的第一個,功能類似于java.sql.ResultSet.first()
  *
  * @return boolean true表示移動成功
  * @throws Exception
  */
  public boolean first() throws Exception;
  
  /**
  * 把游標放到查詢結果的最后一個,功能類似于java.sql.ResultSet.last()
  *
  * @return boolean true表示移動成功
  * @throws Exception
  */
  public boolean last() throws Exception;
  
  /**
  * 取得整個查詢結果的大小,功能類似于java.util.List.size()
  *
  * @return size 查詢結果的大小
  * @throws Exception
  */
  public int size() throws Exception;
  
  /**
  * 提供一個可以遍歷查詢結果的對象,功能類似于java.util.List.iterator()
  *
  * @return DataListIterator 可以遍歷查詢結果的對象
  * @throws Exception
  */
  public DataListIterator iterator() throws Exception;
  
  
  }
  
  
  
  
  
  
  
  
  public interface DataListHandler{
  
  /**
  * 得到查詢結果的一個子集
  *
  * @param startIndex 子集的起始位置
  * @param count 子集的個數
  * @return Datalist 返回一個子集
  * @throws Exception
  */
  public DataList getListChunk(int startIndex, int count) throws Exception;
  
  /**
  * 取得整個查詢結果的大小,功能類似于java.util.List.size()
  *
  * @return size 查詢結果的大小
  * @throws Exception
  */
  public int size() throws Exception;
  
  /**
  * 檢查子集的前面是否還有查詢結果
  *
  * @return boolean true表示前面還有查詢結果
  */
  public boolean hasPrevious();
  
  /**
  * 檢查子集的后面是否還有查詢結果
  *
  * @return boolean true表示后面還有查詢結果
  * @throws Exception
  */
  public boolean hasNext() throws Exception;
  
  /**
  * 關閉對象
  * @throws Exception
  */
  public void close() throws Exception;
  }
  
  
  
  
  
  
  
  * @version 1.0
  *
  * Page實現了DataListHandler。
  *
  * 用于操作ResultSetDataList對象,對查詢結果集進行分頁顯示。在進行顯示的期間,必須
  * 保持數據庫連接Connection和結果集ResultSet沒有關閉。
  * 基本使用方法舉例:
  *
  
   * int index = 4, count = 10;//顯示第5到第14條記錄
   * Connection conn = Pool.getConnection();
   * //(1)使用一個QueryDAO的具體子類來初始化頁對象
   * ResultSetQueryDAO dao = new ResultSetQueryDAO();
   * ResultSetPage page = new ResultSetPage(conn, dao);
   *
   * //(2)或者直接使用一個ResultSet對象來初始化頁對象
   * //ResultSet rs = ...;
   * //ResultSetPage page = new ResultSetPage(conn, rs);
   *
   * //需要顯示的當前頁chunk
   * DataList chunk = page.getListChunk(index, count);
   * //當前頁的前后是否還有記錄,用于顯示PRVEIOUS和NEXT按鈕
   * boolean hasPrevious = page.hasPrevious();
   * boolean hasNext = page.hasNext();
   * //遍歷顯示當前頁的記錄
   * DataListIterator it = chunk.iterator();
   * while (it.hasNext())
   * {
   * String[] valuesOfRow = it.next();
   * for(int i = 0; i < valuesOfRow.length; i++)
   * System.out.println(valuesOfRow[i]);
   * }
   *
   *
  
  *
  * @see QueryDAO
  * @see DataListIterator
  */
  
  import java.sql.*;
  
  public class ResultSetPage implements DataListHandler{
  
  private Connection conn = null;
  private ResultSet rs = null;

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人妇女免费播放久久久| 精品成人久久av| 国产精品自拍小视频| 亚洲天堂网在线观看| 国模极品一区二区三区| 日韩电视剧免费观看网站| 激情亚洲一区二区三区四区| 亚州成人av在线| 庆余年2免费日韩剧观看大牛| 国产欧美日韩综合精品| 国产成人综合av| 国产精品久久久久久久一区探花| 亚洲一区二区久久久| 九九九久久久久久| 久久99国产精品自在自在app| 91精品久久久久久久久中文字幕| 日韩国产欧美区| 狠狠操狠狠色综合网| 国产精品视频精品| 91视频免费网站| 伊人av综合网| 在线播放日韩欧美| 国产+人+亚洲| 亚洲网址你懂得| 亚洲最新中文字幕| 久久影视电视剧凤归四时歌| 国产91精品黑色丝袜高跟鞋| 91最新国产视频| 欧美日韩国产一区中文午夜| 欧美丝袜第一区| 日韩免费av片在线观看| 国内精品视频久久| 精品日韩美女的视频高清| 亚洲免费视频一区二区| 亚洲第一视频在线观看| 国产亚洲成av人片在线观看桃| 97精品久久久中文字幕免费| 精品日韩视频在线观看| 亚洲一区二区三区成人在线视频精品| 色综合色综合网色综合| 国产精品日韩欧美| 国产成人在线视频| 成人有码在线视频| 欧美—级a级欧美特级ar全黄| 中文字幕日韩电影| 国产精品影片在线观看| 中文字幕久热精品视频在线| 亚洲影院高清在线| 欧美激情成人在线视频| 日韩精品中文字幕视频在线| 国产精品91久久久久久| 久久人人97超碰精品888| 伊人青青综合网站| 国产一区二区三区高清在线观看| 亚洲精品久久视频| 97在线看免费观看视频在线观看| 91精品国产高清| 国产精品久久一区主播| 国产成人精品在线观看| 久久精品青青大伊人av| 成人福利网站在线观看| 日韩成人小视频| 亚洲一区二区三区毛片| 久久99青青精品免费观看| 亚洲人成电影网站色…| 日韩精品中文字幕视频在线| 国产午夜精品全部视频在线播放| 中文字幕国产日韩| 亚洲视频日韩精品| 亚洲精品久久久久久久久久久久| 国产成人在线一区二区| 亚洲免费视频在线观看| 国产一区二区三区免费视频| 欧美精品在线免费播放| 中文字幕亚洲欧美| 不卡中文字幕av| 精品国产老师黑色丝袜高跟鞋| 在线观看视频亚洲| 亚州av一区二区| 久久999免费视频| 亚洲人成电影网站色www| 日韩美女免费视频| 在线观看成人黄色| 亚洲高清在线观看| 国产中文字幕91| 亚洲欧美日韩天堂| 国产精品无av码在线观看| 国产精品高潮呻吟久久av黑人| 国产精品久久久久久超碰| 日韩一区二区精品视频| 日韩av第一页| 日韩成人久久久| 日韩电影中文字幕av| 26uuu亚洲伊人春色| 韩剧1988在线观看免费完整版| 色一情一乱一区二区| 欧美日韩国产123| 国产99在线|中文| 欧美又大粗又爽又黄大片视频| 国产人妖伪娘一区91| 久久久久999| 亚洲精品永久免费| 欧美老少配视频| 最近2019中文字幕大全第二页| 中文字幕欧美专区| 亚洲国产精品久久久久秋霞蜜臀| 一区二区在线视频| 国产噜噜噜噜噜久久久久久久久| 午夜精品蜜臀一区二区三区免费| 成人在线观看视频网站| 久久精品国产视频| 日韩欧美在线视频日韩欧美在线视频| 亚洲精品在线91| 久久久最新网址| 国产精品久久综合av爱欲tv| 亚洲日本中文字幕| 51色欧美片视频在线观看| www日韩欧美| 国产成人精品在线观看| 亚洲天堂免费视频| 日韩午夜在线视频| 国产主播欧美精品| 欧美激情一区二区三区高清视频| 国产噜噜噜噜噜久久久久久久久| 国产精品久久久久久久9999| 国产精品88a∨| 欧美日韩一区二区三区在线免费观看| 亚洲精品av在线播放| 在线日韩日本国产亚洲| 97精品国产aⅴ7777| 91精品在线观看视频| 国产精品com| 成人在线免费观看视视频| 国产亚洲精品一区二555| 亚洲国产成人精品女人久久久| 国产一区深夜福利| 91精品啪aⅴ在线观看国产| 欧美激情免费在线| 久久精品成人动漫| 国产免费一区二区三区在线能观看| 亚洲自拍欧美另类| 久久精品国产一区二区三区| 久久久91精品国产一区不卡| 久久综合国产精品台湾中文娱乐网| 91精品国产综合久久男男| 国产成人精品视频| 日韩成人中文字幕| 日韩视频免费看| 欧美视频在线免费看| 国产视频精品在线| 久久免费精品视频| 中文字幕亚洲国产| 欧美精品久久久久久久久久| 91精品国产91久久久| 国产精品一区二区三区毛片淫片| 91日本在线视频| 精品国内自产拍在线观看| 欧美视频二区36p| 亚洲最新中文字幕| 91国产美女视频| 亚洲国产婷婷香蕉久久久久久| 川上优av一区二区线观看| 日本精品视频在线播放| 日韩hd视频在线观看|