提到迭代器我們不能不想到迭代器模式,那我就以迭代器模式作為開場白。
在我們的應用程序中常常有這樣一些數據結構:
它們是一個數據 的集合,如果你知道它們內部的實現結構就可以去訪問它們,它們各自的內部存儲 結構互不相同,各種集合有各自的應用場合.說到這裡大家可能想出一大堆這樣的 集合了:List,Hashtable,ArrayList等等。這些集合各自都有各自的個性,這就 是它們存在的理由。但如果你想遍歷它你必須知道它內部的存儲細節,作為一個 集合元素,把內部細節暴露出來肯定就不好了,這樣客戶程序就不夠穩定了,在你 更換集合對象的時候,比如List不能滿足需求的時候,你換成Hashtable,因為以 前的客戶程序過多的關注了List內部實現的細節,所以不能很好的移植。而迭代 器模式就是為解決這個問題而生的:
提供一種一致的方式訪問集合對象 中的元素,而無需暴露集合對象的內部表示。
比如現在有這樣一個需求 ,遍歷集合內的元素,然後輸出,但是並不限定集合是什麼類型的集合,也就是 未來集合可能發生改變。
思考:
集合會發生改變,這是變化點, 集合改變了,遍歷方法也改變,我們要保證遍歷的方法穩定,那麼就要屏蔽掉細 節。找到了變化點那我們就將其隔離起來(一般使用interface作為隔離手段): 假設所有的集合都繼承自ICollection接口,這個接口用來隔離具體集合的,將 集合屏蔽在接口後面,作為遍歷我們肯定需要這樣一些方法:MoveNext, Current,既然ICollection負責數據存儲,職責又要單一,那麼就新建立一個接 口叫做Iterator吧,每種具體的集合都有自己相對應的Iterator實現: