遮蔽了具體集合、陣列、列表的遍歷方式和具體遍歷的物件, 是一種獲取集合中元素的一種方式。 提供乙個抽象迭代介面,裡面有 hashnext() 是否有下乙個元素, next()下乙個元素,first()獲取第乙個元素等方法。 這個迭代介面由具體集合來實現,並返回乙個迭代器,上層不需要關心迭代的物件是什麼以及內部是以何種方式(逆序還是順序方式)。
1、當你需要使用多種遍歷方式進行對集合迭代時
2、當你只需要遍歷出乙個乙個元素,具體是迭代集合還是陣列元素我們並不需要關心
container:容器類,封裝了資料的基本操作,裡面使用陣列實現的,並且實現了兩種遍歷元素方式
iterator:抽象迭代器介面,由在container內通過匿名類實現其迭代器介面的方法
client:客戶端測試
container 容器類,並且實現了兩種遍歷該容器的方式,但是對於遍歷該容器者來說不需要關心具體的實現細節以及遍歷的物件是陣列還是集合,只需要獲取iterator迭代器就能遍歷出所有元素
/**
* @author duanyimiao
* @create 2018-10-19 10:03 am
* @description 容器類 下面只是簡單實現了下,具體資料校驗和異常都沒有考慮,這裡僅僅為了體會下迭代器模式
**/public
class
container
public
container
(int initialcapacity)
public
void
add(object obj)
public object remove
(int index)
//let gc do it work
elements[
--size]
= null;
return obj;
}/**
* 從頭到尾遍歷
** @return
*/public iterator iteratorbyorder()
@override
public object next()
object[
] elements = container.
this
.elements;
cursor = i +1;
return elements[i];}
};}/**
* 從尾到頭遍歷
** @return
*/public iterator iteratorbyreverse()
@override
public object next()
object[
] elements = container.
this
.elements;
cursor = i-1;
return elements[i];}
};}}
iterator 抽象迭代介面
/**
* @author duanyimiao
* @create 2018-10-19 10:17 am
* @description 抽象迭代介面
**/public
inte***ce
iterator
client 測試類
/**
* @author duanyimiao
* @create 2018-10-19 10:36 am
* @description
**/public
class
client
//採用從尾到頭遍歷方式
container.
remove(2
);iterator iteratorbyreverse = container.
iteratorbyreverse()
;while
(iteratorbyreverse.
hashnext())}}
輸出結果
12321
設計模式之迭代器模式
概念 提供一種方法順序訪問乙個聚合物件中各個元素,而又不需暴露該物件的內部表示。main 客戶 iproject,產品介面 cproject,產品類 iiterator,迭代器介面 iprojectiterator,產品迭代器介面 cprojectiterator,產品迭代器實現類 說明 cproj...
設計模式之迭代器模式
當你需要訪問乙個聚集物件,而且不管這些物件是什麼都需要遍歷的時候,而且可能對聚集有多種方式遍歷時,需要為遍歷不同的聚集結構提供如開始,下乙個,是否結束,當前哪一項等 統一介面,你就應該考慮用迭代器模式.提供一種方法順序訪問乙個聚合物件中各個元素,而又不暴露該物件的內部表示.uml設計圖 部分 ite...
設計模式之迭代器模式
說起迭代器,大家一定不陌生,經常使用的foreach in 這種迴圈就是,c 語言已經內建化了迭代器模式,主要是支援對非泛型集合的簡單迭代介面ieumerator和公開列舉數ienumerable。雖然內建了,但是這種模式也有我們學習的必要性。如下 using system using system...