設計模式詳解——迭代器模式

前言
今天我們要學習的這個設計模式,我們其實在日常開發(fā)中也經(jīng)常用到,但也僅僅只是用過,所以很多時候我都不覺得它是一種設計模式,它就是迭代器模式,由于這個設計模式比較簡單,所以關于它我們能講的內(nèi)容也不多,因此呢,今天的內(nèi)容也就比較少。
迭代器模式
迭代器模式(Iterator Pattern)是 Java和 .Net 編程環(huán)境中非常常用的設計模式。這種模式用于順序訪問集合對象的元素,不需要知道集合對象的底層表示。
迭代器模式提供了一種方法順序,訪問一個聚合對象中的各個元素,而又不暴露其內(nèi)部具體實現(xiàn)細節(jié)
要點
迭代器模式讓我們能游走于聚合內(nèi)的每一個元素,而又不暴露其內(nèi)部的實現(xiàn)細節(jié) 把游走的任務放在迭代器上,而不是聚合上。這樣簡化了聚合的接口和實現(xiàn),也讓責任各得其所
應用
關于迭代器模式,用的最多的當然就是java容器部分的相關內(nèi)容,比如Collection接口。這里我們通過一個簡易的手寫容器,來演示它具體的應用場景。
適配器接口
首先是迭代器的接口,它有兩個方法,一個用于判斷容器是否包含元素;另一個用于拿出容器中的當前角標最小的元素(默認為為0)
public?interface?Iterator?{
???boolean?hasNext();
???Object?next();
}
容器接口
然后是容器接口,容器接口只有一個方法,就是獲取迭代器。
public?interface?Container?{
???Iterator?getIterator();
}
容器實現(xiàn)
容器的內(nèi)部實現(xiàn)包括了迭代器的實現(xiàn)
public?class?SyskeContainer?implements?Container?{
???public?Object[]?values?=?{"云中志"?,?"java"?,"志哥"?,?"syske"};
?
???@Override
???public?Iterator?getIterator()?{
??????return?new?SyskeIterator();
???}
?
???private?class?SyskeIterator?implements?Iterator?{
?
??????int?index;
?
??????@Override
??????public?boolean?hasNext()?{
?????????if(index?????????????return?true;
?????????}
?????????return?false;
??????}
?
??????@Override
??????public?Object?next()?{
?????????if(this.hasNext()){
????????????return?values[index++];
?????????}
?????????return?null;
??????}?????
???}
}
測試代碼
下面的測試代碼也很簡單,就是獲取SyskeContainer的迭代器,然后通過它的迭代器,實現(xiàn)對SyskeContainer容器的遍歷操作:
public?class?SyskeContainerTest?extends?TestCase?{
????public?void?testIterator()?{
????????SyskeContainer?syskeContainer?=?new?SyskeContainer();
????????Iterator?iterator?=?syskeContainer.getIterator();
????????while?(iterator.hasNext())?{
????????????System.out.println(iterator.next());
????????}
????}
}
運行結(jié)果如下:

總結(jié)
從上面的內(nèi)容以及我們的代碼中其實可以看出來,相比于我們前面講到的設計模式,迭代器的內(nèi)容就顯得比較少,而且比較簡單,更重要的是,它的應用場景也很窄,基本上都是集中在批量操作的業(yè)務中,所起的作用就是代替具體的容器,實現(xiàn)遍歷操作,然后實現(xiàn)具體容器與業(yè)務之間的耦合關系。
- END -評論
圖片
表情
