<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                20.2 迭代器模式的定義 迭代器模式(Iterator Pattern)目前已經是一個沒落的模式,基本上沒人會單獨寫一個迭代器,除非是產品性質的開發,其定義如下: Provide a way to access the elements of an aggregate object sequentially without exposing its underlying representation.(它提供一種方法訪問一個容器對象中各個元素,而又不需暴露該對象的內部細節。) 迭代器是為容器服務的,那什么是容器呢? 能容納對象的所有類型都可以稱之為容器,例如Collection集合類型、Set類型等,迭代器模式就是為解決遍歷這些容器中的元素而誕生的。其通用類圖,如圖20-3所示。 ![](https://box.kancloud.cn/2016-08-14_57b00366eaeb1.jpg) 圖20-3 迭代器模式的通用類圖 迭代器模式提供了遍歷容器的方便性,容器只要管理增減元素就可以了,需要遍歷時交由迭代器進行。迭代器模式正是由于使用得太頻繁,所以大家才會忽略,我們來看看迭代器模式中的各個角色: ● Iterator抽象迭代器 抽象迭代器負責定義訪問和遍歷元素的接口,而且基本上是有固定的3個方法:first()獲得第一個元素,next()訪問下一個元素,isDone()是否已經訪問到底部(Java叫做hasNext()方法)。 ● ConcreteIterator具體迭代器 具體迭代器角色要實現迭代器接口,完成容器元素的遍歷。 ● Aggregate抽象容器 容器角色負責提供創建具體迭代器角色的接口,必然提供一個類似createIterator()這樣的方法,在Java中一般是iterator()方法。 ● Concrete Aggregate具體容器 具體容器實現容器接口定義的方法,創建出容納迭代器的對象。 我們來看迭代器模式的通用源代碼,先看抽象迭代器Iterator,如代碼清單20-9所示。 代碼清單20-9 抽象迭代器 public?interface?Iterator?{ ?????//遍歷到下一個元素 ?????public?Object?next(); ?????//是否已經遍歷到尾部 ?????public?boolean?hasNext(); ?????//刪除當前指向的元素 ?????public?boolean?remove(); } 具體迭代器如代碼清單20-10所示。 代碼清單20-10 具體迭代器 public?class?ConcreteIterator?implements?Iterator?{ ?????private?Vector?vector?=?new?Vector(); ?????//定義當前游標 ?????public?int?cursor?=?0; ?????@SuppressWarnings("unchecked") ?????public?ConcreteIterator(Vector?_vector){ ?????????????this.vector?=?_vector; ?????} ?????//判斷是否到達尾部 ?????public?boolean?hasNext()?{ ?????????????if(this.cursor?==?this.vector.size()){ ????????????????????return?false; ?????????????}else{ ????????????????????return?true; ?????????????} ?????} ?????//返回下一個元素 ?????public?Object?next()?{ ?????????????Object?result?=?null; ?????????????if(this.hasNext()){ ????????????????????result?=?this.vector.get(this.cursor++); ?????????????}else{ ????????????????????result?=?null; ?????????????} ?????????????return?result; ?????} ?????//刪除當前元素 ?????public?boolean?remove()?{ ?????????????this.vector.remove(this.cursor); ?????????????return?true; ?????} } 注意 開發系統時,迭代器的刪除方法應該完成兩個邏輯:一是刪除當前元素,二是當前游標指向下一個元素。 抽象容器如代碼清單20-11所示。 代碼清單20-11 抽象容器 public?interface?Aggregate?{ ?????//是容器必然有元素的增加 ?????public?void?add(Object?object); ?????//減少元素 ?????public?void?remove(Object?object); ?????//由迭代器來遍歷所有的元素 ?????public?Iterator?iterator(); } 具體容器如代碼清單20-12所示。 代碼清單20-12 具體容器 public?class?ConcreteAggregate?implements?Aggregate?{ ?????//容納對象的容器 ?????private?Vector?vector?=?new?Vector(); ?????//增加一個元素 ?????public?void?add(Object?object)?{ ?????????????this.vector.add(object); ?????} ?????//返回迭代器對象 ?????public?Iterator?iterator()?{ ?????????????return?new?ConcreteIterator(this.vector); ?????} ?????//刪除一個元素 ?????public?void?remove(Object?object)?{ ?????????????this.remove(object); ?????} } 場景類如代碼清單20-13所示。 代碼清單20-13 場景類 public?class?Client?{ ?????public?static?void?main(String[]?args)?{ ?????????????//聲明出容器 ?????????????Aggregate?agg?=?new?ConcreteAggregate(); ?????????????//產生對象數據放進去 ?????????????agg.add("abc"); ?????????????agg.add("aaa"); ?????????????agg.add("1234");????? ?????????????//遍歷一下 ?????????????Iterator?iterator?=?agg.iterator(); ?????????????while(iterator.hasNext()){ ?????????????????????System.out.println(iterator.next()); ?????????????} ?????} } 簡單地說,迭代器就類似于一個數據庫中的游標,可以在一個容器內上下翻滾,遍歷所有它需要查看的元素。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看