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