1. 程式人生 > >14.迭代器模式(Iterator Pattern)

14.迭代器模式(Iterator Pattern)

1.定義

提供一種方法訪問一個容器物件中各個元素,而又不暴露該物件的內部細節。

目前是一個沒落的模式,基本上沒人會單獨寫一個迭代器,除非是產品性質的開發。

2.型別

行為類模式

3.類圖

4.迭代器模式的使用場景

迭代器模式是與集合共生共死的,一般來說,我們只要實現一個集合,就需要同時提供這個集合的迭代器,就像java中的Collection,List、Set、Map等,這些集合都有自己的迭代器。假如我們要實現一個這樣的新的容器,當然也需要引入迭代器模式,給我們的容器實現一個迭代器。
但是,由於容器與迭代器的關係太密切了,所以大多數語言在實現容器的時候都給提供了迭代器,並且這些語言提供的容器和迭代器在絕大多數情況下就可以滿足我們的需要,所以現在需要我們自己去實踐迭代器模式的場景還是比較少見的,我們只需要使用語言中已有的容器和迭代器就可以了。

5.迭代器模式的通用程式碼

只給出迭代器的抽象類,至於容器類請參考Java的容器。

package _14IteratorPattern;

/**
 *  抽象迭代器,繼承Iterator介面
 */
public abstract class Iterator<E> implements java.util.Iterator<E> {

	// 判斷當前指標是否已經到了隊尾
	@Override
	public boolean hasNext() {
		return false;
	}

	// 獲取下一個E
	@Override
	public E next() {
		return null;
	}

	// 刪除當前E
	@Override
	public void remove() {
		
	}

}

6.迭代器模式的四個角色

  • Iterator抽象迭代器:抽象迭代器負責定義訪問和遍歷元素的介面,而且基本上有固定的三個方法(請參考上面的程式碼)
  • ConcreteIterator具體迭代器:具體迭代器角色要實現迭代器介面,完成容器元素的遍歷
  • Aggregate抽象容器:容器角色負責提供建立具體迭代器的介面,Java中是iterator()方法。
  • ConcreteAggregate具體容器

7.迭代器模式的優點

  • 簡化了遍歷方式,對於物件集合的遍歷,還是比較麻煩的,對於陣列或者有序列表,我們尚可以通過遊標來取得,但使用者需要在對集合瞭解很清楚的前提下,自行遍歷物件,但是對於hash表來說,使用者遍歷起來就比較麻煩了。而引入了迭代器方法後,使用者用起來就簡單的多了。
  • 可以提供多種遍歷方式,比如說對有序列表,我們可以根據需要提供正序遍歷,倒序遍歷兩種迭代器,使用者用起來只需要得到我們實現好的迭代器,就可以方便的對集合進行遍歷了。
  • 封裝性良好,使用者只需要得到迭代器就可以遍歷,而對於遍歷演算法則不用去關心。

8.迭代器模式的缺點

對於比較簡單的遍歷(像陣列或者有序列表),使用迭代器方式遍歷較為繁瑣,大家可能都有感覺,像ArrayList,我們寧可願意使用for迴圈和get方法來遍歷集合。

相關推薦

14.模式Iterator Pattern

1.定義 提供一種方法訪問一個容器物件中各個元素,而又不暴露該物件的內部細節。 目前是一個沒落的模式,基本上沒人會單獨寫一個迭代器,除非是產品性質的開發。 2.型別 行為類模式 3.類圖 4.迭代器模式的使用場景 迭代器模式是與集合共生共死的,一般來說,我們只要實現一

重走Java設計模式——模式Iterator Pattern

迭代器模式 定義 提供一種方法順序訪問一個聚合物件中各個元素, 而又無須暴露該物件的內部表示。 模式結構 1.抽象容器:一般是一個介面,提供一個iterator()方法,例如java中的Collection介面,List介面,Set介面等。 2.具體

我所理解的設計模式C++實現——模式Iterator Pattern

概述:         在現在的電視機中,我們使用[後一個]和[前一個]按鈕可以很方便的換臺,當按下[後一個]按鈕時,將切換到下一個預置的頻道。想象一下在陌生的城市中的旅店中看電視。當改變頻道時,重要的不是幾頻道,而是節目內容。如果對一個頻道的節目不感興趣,那麼可以換下一個頻道,而不需要知道它是幾頻道。  

設計模式模式Iterator Pattern

這篇部落格,我們要詳細講解的是迭代器模式(Iterator Pattern),將要講解的內容有:迭代器模式 的定義,作用,詳細設計分析等方面。 一、Pattern name 迭代器模式(Iterator Pattern) : 提供一種方法

設計模式模式Iterator Pattern

/** * 迭代器模式。 * @author Bright Lee */ public class IteratorPattern { public static void main(String[] args) { String[] strings = new String[

Java設計模式模式Iterator Pattern

介紹 迭代器模式是一種行為型設計模式,它是我們經常使用的一個設計模式,但是基本上不會單獨寫一個迭代器,大都使用的是 Java 語言內建的迭代器。可以說這是一個融入 Java 語言的設計模式,不止 Java ,其他很多語言都會內建這個模式。下面來看它的定義:

設計模式(16)——模式Iterator Pattern

一、引言 在上篇博文中分享了我對命令模式的理解,命令模式主要是把行為進行抽象成命令,使得請求者的行為和接受者的行為形成低耦合。在一章中,將介紹一下迭代器模式。下面廢話不多說了,直接進入本博文的主題。 二、迭代器模式的介紹 迭代器是針對集合物件而生的,對於集合物件而言,必然涉

軟體設計模式——模式Iterator Pattern

用途 迭代器模式用於順序訪問集合物件的元素,不需要知道集合物件的底層表示。 實現 我們將建立一個敘述導航方法的 Iterator 介面和一個返回迭代器的 Container 介面。實現了 Cont

模式Iterator Pattern

概述 在面向物件的軟體設計中,我們經常會遇到一類集合物件,這類集合物件的內部結構可能有著各種各樣的實現,但是歸結起來,無非有兩點是需要我們去關心的:一是集合內部的資料儲存結構,二是遍歷集合內部的資料。面向物件設計原則中有一條是類的單一職責原則,所以我們要儘可能的去分解這些職責,用不同的類去承擔不同的職責。I

設計模式之九:模式Iterator Pattern

GOF 在《設計模式》:提供一種方法順序訪問一個聚合物件中的各個元素,而又不暴露該物件的內部表示。 迭代器模式 是物件行為模式。 聚合:是指一組物件的組合結構,比如:java 中的集合,陣列等。思想:迭代模式的關鍵思想就是把聚合物件的遍歷個訪問從聚合物件中分離出來,放入單

Java設計模式——模式Iterator Pattern

場景一 描述:週五下午,我正在看技術網站,第六感官發覺有人在身後,扭頭一看,我C,老大站在背後,趕忙站起來, “王經理,你找我?” 我說。 “哦,在看技術呀。有個事情找你談一下,你到我辦公室來一下。” 老大說。 到老大辦公室, “是這樣,剛剛我在看季報,我們每個專案的支出費

第17章 模式Iterator Pattern

概述 在面向物件的軟體設計中,我們經常會遇到一類集合物件,這類集合物件的內部結構可能有著各種各樣的實現,但是歸結起來,無非有兩點是需要我們去關心的:一是集合內部的資料儲存結構,二是遍歷集合內部的資料。面向物件設計原則中有一條是類的單一職責原則,所以我們要儘可能的去分解這些職責,用不同的類去承擔不同的職責。I

設計模式模式Iterator

前言: 參考圖書:軟體設計模式與體系結構 參考部落格:https://www.cnblogs.com/wanson/articles/9277813.html   正題:         迭代器(iterator)有時又稱遊標

研磨設計模式模式Iterator1——跟著cc學設計系列

14.1  場景問題 14.1.1  工資表資料的整合        考慮這樣一個實際應用:整合工資表資料。        這個專案的背景是這樣的,專案的客戶方收購了一家小公司,這家小公司有自己的工資系統,現在需要整合到客戶方已有的工資系統上。        客戶方已有的工

研磨設計模式模式Iterator2——跟著cc學設計系列

14.2  解決方案 14.2.1  迭代器模式來解決 用來解決上述問題的一個合理的解決方案就是迭代器模式。那麼什麼是迭代器模式呢? (1)迭代器模式定義   所謂聚合是:指一組物件的組合結構,比如:Java中的集合、陣列等。 (2)應用迭代器模式來解決的思路      

JAVA設計模式模式Iterator Pattern

一、概述     提供一種方法來訪問聚合物件(容器container),而不用暴露這個物件的內部細節。屬於物件行為型模式。 二、適用場景     1>遍歷訪問聚合物件中的元素,而無須暴露它的內容表示,將聚合物件的訪問和內部資料的儲存分離。使得訪問聚合物件時無須瞭解

Java設計模式--模式Iterator Pattern

          在Java中,因為從JDK 1.2 版本開始增加java.util.Iterator 這個介面,並逐步把Iterator 應用到各個聚集類(Collection)中,我們來看JDK 1.5 的API 幫助檔案,你會看到有一個叫java.util.Iter

17、行為型-模式Iterator

迭代器模式(Iterator Pattern):提供一種方法來訪問聚合物件,而不用暴露這個物件的內部表示,其別名為遊標(Curso

模式java版

迭代器模式的組成部分 Aggregate(抽象聚合類) 它用於儲存和管理元素物件,宣告一個createiterator()方法用於建立一個迭代器物件,充當抽象迭代器工廠角色。   ConcreteAggregate(具體聚合類) 它用於抽象聚合類的子類,實現了在抽象集合類中的宣告的crea

設計模式十九模式行為型

一、簡介(Brief Introduction)        提供一種方法順序訪問一個聚合物件中各個元素,而又不需暴露該物件的內部表示 例子1:電視遙控器的頻道遍歷   二、模式分析(Analysi