天天看點

大話設計模式十八之疊代器模式

售票員其實在做一件重要的事,就是把車廂裡的所有人都周遊了一遍,不放過一個不買票的乘客。者也是一個設計模式的展現。

疊代器模式(Iterator),提供一種方法順序通路一個聚合對象中各個元素,而又不爆露該對象的内部表示。

當你需要通路一個聚集對象,而且不管這些對象是什麼都需要周遊的時候,你就應該考慮用疊代器模式。

需要對聚集有多種方式周遊時,可以考慮用疊代器模式。

為周遊不同的聚集結構提供如開始、下一個、是否結束、目前哪一項等統一的接口。

研究曆史是為了更好地迎接未來。

大話設計模式十八之疊代器模式
大話設計模式十八之疊代器模式
大話設計模式十八之疊代器模式
大話設計模式十八之疊代器模式
大話設計模式十八之疊代器模式
大話設計模式十八之疊代器模式

用具體的疊代器ConcreteIterator來實作抽象的Iterator是因為疊代器的另一個好處,當需要對聚集有多種方式周遊時,可以考慮用疊代器模式。

從後往前的具體疊代器

大話設計模式十八之疊代器模式

用戶端隻需要更改一個地方就可以實作反向周遊了

大話設計模式十八之疊代器模式

三、.NET的疊代器實作

大話設計模式十八之疊代器模式

IEumerator要比剛才寫的抽象類Iterator藥監局,但是可實作的功能卻一點也不少,這其實是對GoF的設計改良的結果。

兩個接口還有相應的泛型接口,這兩個接口的代碼也差别不大。

foreach in的代碼

大話設計模式十八之疊代器模式

foreach in就是實作這兩個接口來實際循環周遊。

疊代器(Iterator)模式就是分離了集合對象的周遊行為,抽象出一個疊代器類來負責,這樣既可以做到不暴露集合的内部結構,又可讓外部代碼透明地通路集合内部的資料。

疊代器模式在通路數組、集合、清單等資料時,尤其是資料庫操作時,是非常普遍的應用,但由于它太普遍了,是以各種進階語言都對它進行了封裝,是以反而給人感覺此模式本身不太常用了。