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

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # 迭代器設計模式 > 原文: [https://howtodoinjava.com/design-patterns/behavioral/iterator-design-pattern/](https://howtodoinjava.com/design-patterns/behavioral/iterator-design-pattern/) 根據 GoF 定義,**迭代器模式**提供了一種順序訪問聚合對象元素的方法,而無需暴露其基礎表示。 這是行為[設計模式](https://howtodoinjava.com/gang-of-four-java-design-patterns/)。 顧名思義,迭代器有助于**以定義的方式**遍歷對象的集合,這對客戶端應用很有用。 在迭代期間,客戶端程序可以根據需要對元素執行各種其他操作。 ## 1.何時使用迭代器設計模式 每種編程語言都支持一些數據結構,例如列表或映射,用于存儲一組相關對象。 在 Java 中,我們具有`List`,`Map`和`Set`接口及其實現,例如[`ArrayList`](https://howtodoinjava.com/java-arraylist/)和`HashMap`。 集合僅在提供一種在不暴露其內部結構的情況下訪問其元素的方式時才有用。 迭代器承擔此責任。 因此,任何時候,我們都有對象集合,并且客戶端需要一種以某種適當順序迭代每個集合元素的方法,我們必須使用迭代器模式來設計解決方案。 迭代器模式使我們能夠以以下方式設計集合迭代器: * 我們能夠訪問集合的元素而無需暴露元素的內部結構或集合本身。 * 迭代器支持從開始到結束以向前,向后或雙向雙向遍歷一個集合。 * 迭代器提供了一個統一的接口,用于透明地遍歷不同的集合類型。 > 關鍵思想是從聚合對象中承擔訪問和遍歷的責任,并將其放入定義標準遍歷協議的`Iterator`對象中。 ## 2.迭代器模式的真實示例 * 在 Java 中,我們具有`java.util.Iterator`接口及其特定的實現,例如[`ListIterator`](https://howtodoinjava.com/java/collections/java-listiterator/)。 所有 Java 集合都提供`Iterator`接口的一些內部實現,這些接口用于遍歷集合元素。 ```java List<String> names = Arrays.asList("alex", "brian", "charles"); Iterator<String> namesIterator = names.iterator(); while (namesIterator.hasNext()) { String currentName = namesIterator.next(); System.out.println(currentName); } ``` * 在媒體播放器中,我們列出了歌曲列表,我們可以通過遍歷歌曲列表并選擇所需的歌曲來播放歌曲。 這也是一個迭代器示例。 ## 3.迭代器設計模式 #### 3.1 架構 ![Iterator Pattern Class Diagram](https://img.kancloud.cn/5b/2f/5b2fc0ba68e090eeb969d8e833e2eb08_1418x768.png) 迭代器模式類圖 #### 3.2 設計參與者 迭代器模式的參與者如下: * **`Iterator`**:訪問或遍歷元素集合的接口。 提供具體的迭代器必須實現的方法。 * **`ConcreteIterator`**:實現`Iterator`接口方法。 它還可以在遍歷聚合集合時跟蹤當前位置。 * **`Aggregate`**:通常是一個集合接口,它定義可以創建`Iterator`對象的方法。 * **`ConcreteAggregate`**:它實現`Aggregate`接口,其特定方法返回`ConcreteIterator`的實例。 ## 4.迭代器設計模式示例 在此迭代器模式示例中,我們正在創建一個集合,該集合可以保存`Token`類的實例,并將提供一個迭代器來迭代序列中的標記集合。 ```java public class Topic { private String name; public Topic(String name) { super(); this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } } ``` ```java public interface Iterator<E> { void reset(); // reset to the first element E next(); // To get the next element E currentItem(); // To retrieve the current element boolean hasNext(); // To check whether there is any next element or not. } ``` ```java public class TopicIterator implements Iterator<Topic> { private Topic[] topics; private int position; public TopicIterator(Topic[] topics) { this.topics = topics; position = 0; } @Override public void reset() { position = 0; } @Override public Topic next() { return topics[position++]; } @Override public Topic currentItem() { return topics[position]; } @Override public boolean hasNext() { if(position >= topics.length) return false; return true; } } ``` ```java public interface List<E> { Iterator<E> iterator(); } ``` ```java public class TopicList implements List<Topic> { private Topic[] topics; public TopicList(Topic[] topics) { this.topics = topics; } @Override public Iterator<Topic> iterator() { return new TopicIterator(topics); } } ``` 使用迭代器的客戶端代碼將像這樣。 ```java public class Main { public static void main(String[] args) { Topic[] topics = new Topic[5]; topics[0] = new Topic("topic1"); topics[1] = new Topic("topic2"); topics[2] = new Topic("topic3"); topics[3] = new Topic("topic4"); topics[4] = new Topic("topic5"); List<Topic> list = new TopicList(topics); Iterator<Topic> iterator = list.iterator(); while(iterator.hasNext()) { Topic currentTopic = iterator.next(); System.out.println(currentTopic.getName()); } } } ``` 程序輸出。 ```java topic1 topic2 topic3 topic4 topic5 ``` 在評論中向我發送有關**迭代器模式**的問題。 學習愉快! 參考:[維基百科](https://en.wikipedia.org/wiki/Iterator_pattern)
                  <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>

                              哎呀哎呀视频在线观看