詳解Java設(shè)計模式——迭代器模式
迭代子模式
顧名思義,迭代器模式就是順序訪問聚集中的對象,一般來說,集合中非常常見,如果對集合類比較熟悉的話,理解本模式會十分輕松。這句話包含兩層意思:一是需要遍歷的對象,即聚集對象,二是迭代器對象,用于對聚集對象進(jìn)行遍歷訪問。我們看下關(guān)系圖:
這個思路和我們常用的一模一樣,MyCollection中定義了集合的一些操作,MyIterator中定義了一系列迭代操作,且持有Collection實例,我們來看看實現(xiàn)代碼:
兩個接口:
public interface Collection { public Iterator iterator(); /*取得集合元素*/ public Object get(int i); /*取得集合大小*/ public int size(); } public interface Iterator { //前移 public Object previous(); //后移 public Object next(); public boolean hasNext(); //取得第一個元素 public Object first(); }
兩個實現(xiàn):
public class MyCollection implements Collection { public String string[] = {"A","B","C","D","E"}; @Override public Iterator iterator() { return new MyIterator(this); } @Override public Object get(int i) { return string[i]; } @Override public int size() { return string.length; } } public class MyIterator implements Iterator { private Collection collection; private int pos = -1; public MyIterator(Collection collection){ this.collection = collection; } @Override public Object previous() { if(pos > 0){ pos--; } return collection.get(pos); } @Override public Object next() { if(pos<collection.size()-1){ pos++; } return collection.get(pos); } @Override public boolean hasNext() { if(pos<collection.size()-1){ return true; }else{ return false; } } @Override public Object first() { pos = 0; return collection.get(pos); } }
測試類:
public class Test { public static void main(String[] args) { Collection collection = new MyCollection(); Iterator it = collection.iterator(); while(it.hasNext()){ System.out.println(it.next()); } } }
此處我們貌似模擬了一個集合類的過程,感覺是不是很爽?其實JDK中各個類也都是這些基本的東西,加一些設(shè)計模式,再加一些優(yōu)化放到一起的,只要我們把這些東西學(xué)會了,掌握好了,我們也可以寫出自己的集合類,甚至框架!
介紹
意圖:提供一種方法順序訪問一個聚合對象中各個元素, 而又無須暴露該對象的內(nèi)部表示。
主要解決:不同的方式來遍歷整個整合對象。
何時使用:遍歷一個聚合對象。
如何解決:把在元素之間游走的責(zé)任交給迭代器,而不是聚合對象。
關(guān)鍵代碼:定義接口:hasNext, next。
應(yīng)用實例:JAVA 中的 iterator。
優(yōu)點(diǎn):
1、它支持以不同的方式遍歷一個聚合對象。
2、迭代器簡化了聚合類。
3、在同一個聚合上可以有多個遍歷。
4、在迭代器模式中,增加新的聚合類和迭代器類都很方便,無須修改原有代碼。
缺點(diǎn):由于迭代器模式將存儲數(shù)據(jù)和遍歷數(shù)據(jù)的職責(zé)分離,增加新的聚合類需要對應(yīng)增加新的迭代器類,類的個數(shù)成對增加,這在一定程度上增加了系統(tǒng)的復(fù)雜性。
使用場景:
1、訪問一個聚合對象的內(nèi)容而無須暴露它的內(nèi)部表示。
2、需要為聚合對象提供多種遍歷方式。
3、為遍歷不同的聚合結(jié)構(gòu)提供一個統(tǒng)一的接口。
注意事項:迭代器模式就是分離了集合對象的遍歷行為,抽象出一個迭代器類來負(fù)責(zé),這樣既可以做到不暴露集合的內(nèi)部結(jié)構(gòu),又可讓外部代碼透明地訪問集合內(nèi)部的數(shù)據(jù)。
以上所述是小編給大家介紹的Java設(shè)計模式——迭代器模式詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
Unicode、UTF-8 和 ISO8859-1區(qū)別解析
這篇文章主要介紹了Unicode、UTF-8 和 ISO8859-1到底有什么區(qū)別,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-01-01一文掌握J(rèn)ava開發(fā)工具M(jìn)aven(簡單上手)
掌握maven的相關(guān)知識是Java開發(fā)必備的技能,今天通過本文從入門安裝開始,逐步深入講解maven的相關(guān)知識,包括maven的安裝到簡單上手maven項目開發(fā),感興趣的朋友跟隨小編一起看看吧2021-06-06JAVA實現(xiàn)網(wǎng)絡(luò)/本地圖片轉(zhuǎn)BASE64存儲代碼示例
這篇文章主要給大家介紹了關(guān)于JAVA實現(xiàn)網(wǎng)絡(luò)/本地圖片轉(zhuǎn)BASE64存儲的相關(guān)資料,Base64是網(wǎng)絡(luò)上最常見的用于傳輸8Bit字節(jié)碼的編碼方式之一,Base64就是一種基于64個可打印字符來表示二進(jìn)制數(shù)據(jù)的方法,需要的朋友可以參考下2023-07-07關(guān)于JAVA中stream流的基礎(chǔ)處理(獲取對象字段和對象批量處理等)
這篇文章主要介紹了關(guān)于JAVA中stream流的基礎(chǔ)處理,包含獲取對象字段、按字段排序、按字段去重、對象批量處理、指定字段轉(zhuǎn)數(shù)組等內(nèi)容,需要的朋友可以參考下2023-03-03Java的特點(diǎn)和優(yōu)點(diǎn)(動力節(jié)點(diǎn)整理)
由于Java語言的設(shè)計者們十分熟悉C++語言,所以在設(shè)計時很好地借鑒了C++語言??梢哉f,Java語言是一種比C++語言“還面向?qū)ο蟆钡囊环N編程語言,下面通過本文說下java的特點(diǎn)和優(yōu)點(diǎn)2017-03-03