迭代設計模式

一、又叫遊標(Cursor)模式,是對象的行爲模式java

  • 迭代子模式能夠順序地訪問一個彙集中的元素而沒必要暴露彙集的內部表象
  • 彙集依賴於彙集結構的抽象化,具備複雜化和多樣性
  • 數組就是最基本的彙集,也是其餘的JAVA彙集對象的設計基礎
  • JAVA彙集對象是實現了共同的java.util.Collection接口的對象,是JAVA語言對彙集概念的直接支持
  • JAVA語言提供了不少種彙集,包括Vector、ArrayList、HashSet、HashMap、Hashtable等,這些都是JAVA彙集的例子

二、迭代子模式的結構算法

  • 白箱彙集與外稟迭代子
  • 黑箱彙集於內稟迭代子

白箱彙集與外稟迭代子數組

  • 若是一個彙集的接口提供了能夠用來修改彙集元素的方法,這個接口就是所謂的寬接口
  • 這樣會破壞對彙集對象的封裝。這種提供寬接口的彙集叫作白箱彙集

  • 因爲彙集本身實現迭代邏輯,並向外部提供適當的接口,使得迭代子能夠從外部控制彙集元素的迭代過程
  • 這樣一來迭代子所控制的僅僅是一個遊標而已,這種迭代子叫作遊標迭代子(Cursor Iterator)
  • 因爲迭代子是在彙集結構以外的,所以這樣的迭代子又叫作外稟迭代子(Extrinsic Iterator)

  • 客戶端代碼

黑箱彙集與內稟迭代子spa

  • 若是一個彙集的接口沒有提供修改彙集元素的方法,這樣的接口就是所謂的窄接口

  • 客戶端代碼

主動迭代子和被動迭代子

  • 所謂主動(外部)迭代子,指的是由客戶端來控制迭代下一個元素的步驟,客戶端會明顯調用迭代子的next()等迭代方法
  • 所謂被動(內部)迭代子,指的是由迭代子本身來控制迭代下一個元素的步驟
  • 整體來講外部迭代器比內部迭代器要靈活一些,所以咱們常見的實現多屬於主動迭代子

靜態迭代子和動態迭代子

  • 靜態迭代子由彙集對象建立,並持有彙集對象的一份快照(snapshot),在產生後這個快照的內容就再也不變化
  • 動態迭代子則與靜態迭代子徹底相反,在迭代子被產生以後,迭代子保持着對彙集元素的引用

三、完整的動態迭代子不容易實現,可是簡化的動態迭代子並不難實現設計

Fail Fast

  • JAVA語言以接口java.util.Iterator的方式支持迭代子模式
  • Collection接口要求提供iterator()方法,此方法在調用時返還一個Iterator類型的對象
  • 做爲Collection接口的子類型,AbstractList類的內部成員類Itr即是實現Iterator接口的類

迭代子模式的優勢

  • 迭代子模式簡化了彙集的接口。迭代子具有了一個遍歷接口,這樣彙集的接口就沒必要具有遍歷接口
  • 每個彙集對象均可以有一個或多個迭代子對象,每個迭代子的迭代狀態能夠是彼此獨立的
  • 因爲遍歷算法被封裝在迭代子角色裏面,所以迭代的算法能夠獨立於彙集角色變化
相關文章
相關標籤/搜索