1. 程式人生 > >Iterator Pattern--迭代器設計模式

Iterator Pattern--迭代器設計模式

1. What is? 關於迭代器設計模式

下面的解釋如果看不下去可以看這個連結,以及這個
設計意圖:
1). 提供一種順序訪問一組物件而不用暴露其潛在實現的機制。
2). C++和java標準庫抽象使得把關於集合的類和演算法解耦合成為可能。
3). 有利於推廣到‘全object狀態’的集合訪問機制。
4). 提供多型方式的便利機制。

存在問題:
我們需要抽象出不同資料結構的訪問方式來定義演算法,以至於這些資料結構能夠更加透明的方式進行互動。
解決方案:
通常的容器類,比如說List已經給了我們訪問其容器中元素的方式,同時隱藏了其內部實現。但,當我們想要以一種新的自定義方式遍歷的時候,同時我們不想增加太多內容這樣會使得List介面變得很臃腫,我們怎麼做呢?
提供一種通用的能夠遍歷很多種集合物件(i.e. 多型迭代)將很有意義。
迭代器模式做的是這樣一類工作:主要思想是負責訪問和遍歷整個集合元素,通過把它放入已經定義好了標準便利協議的迭代器物件中。

2. Iterator Design pattern 圖示

這裡定義了2個介面:
interface Container & Iterator.
一個實際類型別:
NameRepository: 外部直接實現了Container 介面,內部類中實現了Iterator介面。
這裡寫圖片描述

3. 迭代器設計模式Demo

package com.fqy.blog;

/*
 * @fqyuan 2017/06/26
 * Interface: Iterator
 * Interface: Container
 * NameRepository: Concrete class that implements Container with an inner class which implements Iterator.
 */
interface Iterator { public boolean hasNext(); public Object next(); } interface Container { public Iterator getIterator(); } class NameRepository implements Container { public String names[] = { "Robert", "John", "Julie", "Lora" }; @Override public Iterator getIterator() { // TODO Auto-generated method stub
return new NameIterator(); } private class NameIterator implements Iterator { int index; @Override public boolean hasNext() { if (index < names.length) return true; return false; } @Override public Object next() { if (this.hasNext()) return names[index++]; return null; } } } public class IteratorPatternDemo { public static void main(String[] args) { NameRepository nameRepository = new NameRepository(); Iterator iterator = nameRepository.getIterator(); while (iterator.hasNext()) { String name = (String) iterator.next(); System.out.println("Name: " + name); } } } //Running result: Name: Robert Name: John Name: Julie Name: Lora

相關推薦

Iterator Pattern--設計模式

1. What is? 關於迭代器設計模式 下面的解釋如果看不下去可以看這個連結,以及這個。 設計意圖: 1). 提供一種順序訪問一組物件而不用暴露其潛在實現的機制。 2). C++和java標

JS-Javascript 設計模式 Iterator pattern

這篇博文簡短的提一下Iterator的設計模式,以及這種設計模式給我們帶來什麼樣的好處。 1.begin 為了體現面向物件的特性(近年來的ES6為這方面做了很大的努力),此篇博文的語言編寫基於typescript,當然也會附上原生js的書寫方式。 1.1迭

Iterator使用與設計模式

Iterator使用 迭代器(Iterator)對應與迭代器設計模式。 Iterator提供三個方法: hasNext() 判斷是否還有下一個元素 next() 獲取下一個元素 remove() 刪除元素 forEachRemaining() jdk1.8以後新增的方法,可以在動

設計模式Iterator

背景:如果一個檔案在不斷的增量增加資料,如果需要增量的讀取這個檔案,則可以使用迭代器設計模式對增量的資料進行迭代遍歷。 例如:一篇文件aa.txt aaa aaa aaa aaa 則可以把這片文章分為 片段(檔案,開始,結束),段落(檔案,開始,結束) 檔案的中新增的資料需

設計模式Iterator設計模式(容器和容器的遍歷)

在遍歷容器元素的時候,有很多初學者在疑惑,為什麼返回一個iterator我就能夠去遍歷這個容器了呢? 今天我們就來深入剖析一下迭代器iterator的設計模式(循序漸進的剖析,一定要耐心看完) iterator是"四人幫"所定義的23種設計模式之一(不太難,也不是非常重要,

Iterator()設計模式

宣告:本博文篇幅短,適合review。 一、概念        提供一種方法訪問一個容器物件中的各個元素,而又不暴露該物件的內部細節。 二、模式結構圖 三、例子 template<class Item> class Iterator { public:

檔案使用設計模式進行讀取

背景:由於檔案很大,一次載入到記憶體很耗費記憶體的空間,因此可以使用迭代器設計模式進行設計,一次讀取一行,載入到記憶體。 package iterator; public class FileReadWriterTest { public static void ma

“全棧2019”Java第九十三章:內部類應用場景(設計模式

難度 初級 學習時間 10分鐘 適合人群 零基礎 開發語言 Java 開發環境 JDK v11 IntelliJ IDEA v2018.3 文章原文連結 “全棧2019”Java第九十三章:內部類應用場景(迭代器設計模式) 下一章 “全棧2019”Java第九十四章:區

Java設計模式(十):設計模式

1.應用場景 (1)訪問一個聚合物件的內容而無需暴露它的內部表示 (2)支援對聚合物件的多種遍歷 (3)為遍歷不同的聚合結構提供一個統一的介面 2.概念 提供一種順序訪問聚合物件元素的方法,並且不暴露聚合物件的內部表示。這個模式給使用者提供了一種方法,可以順序訪問一個聚集

----- 設計模式

1前言 在面向物件中,針對抽象集合迭代行為的設計模式稱為迭代器。 2 詳述 2.1 簡述 迭代器提供了一種順序訪問聚合物件(集合)中元素的方法,而無需暴露結構的底層表示和細節。便利集合中元素的只能從集合本身轉移到迭代器物件。迭代器定義了一個用於訪問集合元素並記錄當前元素的介面。不同的迭代器可以執行

23種設計模式 設計模式

使用迭代器模式,我們可以自己定義介面,但是在JDK中已經有定義好的迭代器介面,可以滿足大部分的使用場景: interface Iterator<E> { boolean hasNext(); E next(); default void remove() {

設計模式,幫你大幅提升Python效能

大家好,我們的git專題已經更新結束了,所以開始繼續給大家寫一點設計模式的內容。 今天給大家介紹的設計模式非常簡單,叫做iterator,也就是迭代器模式。迭代器是Python語言當中一個非常重要的內容,藉助迭代器我們可以很方便地實現很多複雜的功能。在深度學習當中,資料的獲取往往也是通過迭代器實現的。因此這部

Java中Iterator設計原理

         我們知道迭代器(Iterator)是一種物件,它能夠用來遍歷標準模板庫容器中的部分或全部元素。那麼Iterator迭代器的設計原理是什麼呢?迭代器問什麼定義了一個藉口,而不是一個類呢

Java 知識點整理-9.Java集合框架 集合概述+Collection介面+Iterator介面++List介面+併發修改異常+ListIterator介面+Vector類+List子類

本章會用大量程式碼做具體演示。統一說明:返回型別E在JDK1.5之前是Object,1.5之後等泛型再講。 先介紹一個偶然發現的快捷鍵和一個很實用的快捷鍵: Alt + Shift + N 快速呼叫建立選單。直接按開頭的首字母進行建立即可,某些時候感覺比Ctrl + N更快捷。

Iterator使用這個訪問方法,可以讓開發人員不需要了解訪問的容器的底層結構,就可以對容器遍歷 是輕量級的容器

package com.java.Interview; import java.util.Iterator; import java.util.LinkedList; import java.util.List; public class TestIterato

“全棧2019”Java第九十三章:內部類應用場景(叠設計模式

回復 src out 局部內部類 學習 聲明 環境 計劃 適合 難度 初級 學習時間 10分鐘 適合人群 零基礎 開發語言 Java 開發環境 JDK v11 IntelliJ IDEA v2018.3 文章原文鏈接 “全棧2019”Java第九十三章:內部類應用場景(

Iterator)的使用

最近使用Hibernate,在多對一對映中需要用到Set<T> 物件,為了把物件中的資料輸出,用到了Iterator物件。 Iterator是一個輕量級(建立代價很小)物件,它可以遍歷序列

Iterator)、增強for迴圈

二、Iterator介面 三、Iterator的實現過程 四、迭代器的併發修改異常 五、增強的for迴圈 一、迭代器(It

Iterator的兩中使用方式for和while)

方式一 for(Iterator<String> it = list.iterator();it.hasNext();){             System.out.println(it.next());             } 方式二 Iterato

scala陣列、Scala Collection(集合)、Iterator

一、scala陣列 陣列:用來儲存固定大小的同類型元素,通過索引來訪問指定元素,索引index從0開始 宣告陣列 定義陣列--語法格式: var z:Array[String] = new Array[String](3) 或 var z = new Array[St