<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>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # 遍歷聚合對象中的元素——迭代器模式(二) 2 迭代器模式概述 在軟件開發中,我們經常需要使用聚合對象來存儲一系列數據。聚合對象擁有兩個職責:一是存儲數據;二是遍歷數據。從依賴性來看,前者是聚合對象的基本職責;而后者既是可變化的,又是可分離的。因此,可以將遍歷數據的行為從聚合對象中分離出來,封裝在一個被稱之為“迭代器”的對象中,由迭代器來提供遍歷聚合對象內部數據的行為,這將簡化聚合對象的設計,更符合“單一職責原則”的要求。 迭代器模式定義如下: 迭代器模式(Iterator Pattern):提供一種方法來訪問聚合對象,而不用暴露這個對象的內部表示,其別名為游標(Cursor)。迭代器模式是一種對象行為型模式。 在迭代器模式結構中包含聚合和迭代器兩個層次結構,考慮到系統的靈活性和可擴展性,在迭代器模式中應用了工廠方法模式,其模式結構如圖3所示: ![](http://img.blog.csdn.net/20130815225537578?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvTG92ZUxpb24=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) 圖3 迭代器模式結構圖 在迭代器模式結構圖中包含如下幾個角色: ● Iterator(抽象迭代器):它定義了訪問和遍歷元素的接口,聲明了用于遍歷數據元素的方法,例如:用于獲取第一個元素的first()方法,用于訪問下一個元素的next()方法,用于判斷是否還有下一個元素的hasNext()方法,用于獲取當前元素的currentItem()方法等,在具體迭代器中將實現這些方法。 ● ConcreteIterator(具體迭代器):它實現了抽象迭代器接口,完成對聚合對象的遍歷,同時在具體迭代器中通過游標來記錄在聚合對象中所處的當前位置,在具體實現時,游標通常是一個表示位置的非負整數。 ● Aggregate(抽象聚合類):它用于存儲和管理元素對象,聲明一個createIterator()方法用于創建一個迭代器對象,充當抽象迭代器工廠角色。 ● ConcreteAggregate(具體聚合類):它實現了在抽象聚合類中聲明的createIterator()方法,該方法返回一個與該具體聚合類對應的具體迭代器ConcreteIterator實例。 在迭代器模式中,提供了一個外部的迭代器來對聚合對象進行訪問和遍歷,迭代器定義了一個訪問該聚合元素的接口,并且可以跟蹤當前遍歷的元素,了解哪些元素已經遍歷過而哪些沒有。迭代器的引入,將使得對一個復雜聚合對象的操作變得簡單。 下面我們結合代碼來對迭代器模式的結構進行進一步分析。在迭代器模式中應用了工廠方法模式,抽象迭代器對應于抽象產品角色,具體迭代器對應于具體產品角色,抽象聚合類對應于抽象工廠角色,具體聚合類對應于具體工廠角色。 在抽象迭代器中聲明了用于遍歷聚合對象中所存儲元素的方法,典型代碼如下所示: ``` interface Iterator { public void first(); //將游標指向第一個元素 public void next(); //將游標指向下一個元素 public boolean hasNext(); //判斷是否存在下一個元素 public Object currentItem(); //獲取游標指向的當前元素 } ``` 在具體迭代器中將實現抽象迭代器聲明的遍歷數據的方法,如下代碼所示: ``` class ConcreteIterator implements Iterator { private ConcreteAggregate objects; //維持一個對具體聚合對象的引用,以便于訪問存儲在聚合對象中的數據 private int cursor; //定義一個游標,用于記錄當前訪問位置 public ConcreteIterator(ConcreteAggregate objects) { this.objects=objects; } public void first() { ...... } public void next() { ...... } public boolean hasNext() { ...... } public Object currentItem() { ...... } } ``` 需要注意的是抽象迭代器接口的設計非常重要,一方面需要充分滿足各種遍歷操作的要求,盡量為各種遍歷方法都提供聲明,另一方面又不能包含太多方法,接口中方法太多將給子類的實現帶來麻煩。因此,可以考慮使用抽象類來設計抽象迭代器,在抽象類中為每一個方法提供一個空的默認實現。如果需要在具體迭代器中為聚合對象增加全新的遍歷操作,則必須修改抽象迭代器和具體迭代器的源代碼,這將違反“開閉原則”,因此在設計時要考慮全面,避免之后修改接口。 聚合類用于存儲數據并負責創建迭代器對象,最簡單的抽象聚合類代碼如下所示: ``` interface Aggregate { Iterator createIterator(); } ``` 具體聚合類作為抽象聚合類的子類,一方面負責存儲數據,另一方面實現了在抽象聚合類中聲明的工廠方法createIterator(),用于返回一個與該具體聚合類對應的具體迭代器對象,代碼如下所示: ``` class ConcreteAggregate implements Aggregate { ...... public Iterator createIterator() { return new ConcreteIterator(this); } ...... } ``` 思考 > 理解迭代器模式中具體聚合類與具體迭代器類之間存在的依賴關系和關聯關系。
                  <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>

                              哎呀哎呀视频在线观看