設計模式 十七 迭代器模式

2021-09-04 02:03:06 字數 1530 閱讀 9159

iterator pattern

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

迭代器模式是一種物件行為型模式。

聚合物件是來儲存一系列資料。

聚合物件擁有兩個職責:一是儲存資料;二是遍歷資料。從依賴性來看,前者是聚合物件的基本職責;而後者既是可變化的,又是可分離的。

因此,可以將遍歷資料的行為從聚合物件中分離出來,封裝在乙個被稱之為「迭代器」的物件中,由迭代器來提供遍歷聚合物件內部資料的行為,這將簡化聚合物件的設計,更符合「單一職責原則」的要求。

在迭代器模式中,提供了乙個外部的迭代器來對聚合物件進行訪問和遍歷,迭代器定義了乙個訪問該聚合元素的介面,並且可以跟蹤當前遍歷的元素,了解哪些元素已經遍歷過而哪些沒有。

迭代器的引入,將使得對乙個複雜聚合物件的操作變得簡單。

迭代器模式結構圖:

優點:

缺點:

//  抽象迭代器

inte***ce

abstractiterator

// 抽象聚合類

abstract

class

abstractobjectlist

public

void

addobject

(object obj)

public

void

removeobject

(object obj)

list

getlist()

//宣告建立迭代器物件的抽象工廠方法

public

abstract abstractiterator createiterator()

;}// 具體聚合類

class

productlist

extends

abstractobjectlist

//實現建立迭代器物件的具體工廠方法

public abstractiterator createiterator()

// 具體迭代器

private

class

productiterator

implements

abstractiterator

public object next()

return o;

}public

boolean

islast()

public object previous()

public

boolean

isfirst()

public object getnextitem()

public object getpreviousitem()

}}

設計模式 十七 迭代器模式

比如集合 迭代器將儲存資料和遍歷資料隔離開來,但是每新增加乙個集合就需要新增乙個迭代器型別。日常使用時很少會自定義給乙個迭代器,都是復用jdk的迭代器。課程public class course public string getname 存放課程 存放課程 遍歷課程 public inte ce ...

大話設計模式筆記(十七) 迭代器模式

提供一種方法順序訪問乙個聚合物件中各個元素,而又不暴露該物件的內部表示。聚集抽象類 created by callmedevil on 2019 8 17.public abstract class aggregate 迭代器抽象類 created by callmedevil on 2019 8 ...

設計模式觀後(c 還原之十七 迭代器模式)

迭代器模式 現在已經基本感覺沒意思了,感覺每個23鐘模式圍繞著前面的6個原則設計 只是增加了示例見識,還不見得全記得住。估計要用的時候才會迅速找到 不說了,要加速23鐘模式 快點進入模式混合搭配,才能深刻理解 作者把管理專案資訊做了乙個迭代器 先抽象基類 class projectiterator ...