最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解Java設(shè)計(jì)模式——迭代器模式

 更新時(shí)間:2019年03月14日 11:51:41   作者:No_Game_No_Life_  
這篇文章主要介紹了Java設(shè)計(jì)模式——迭代器模式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

迭代子模式

顧名思義,迭代器模式就是順序訪(fǎng)問(wèn)聚集中的對(duì)象,一般來(lái)說(shuō),集合中非常常見(jiàn),如果對(duì)集合類(lèi)比較熟悉的話(huà),理解本模式會(huì)十分輕松。這句話(huà)包含兩層意思:一是需要遍歷的對(duì)象,即聚集對(duì)象,二是迭代器對(duì)象,用于對(duì)聚集對(duì)象進(jìn)行遍歷訪(fǎng)問(wèn)。我們看下關(guān)系圖:

這個(gè)思路和我們常用的一模一樣,MyCollection中定義了集合的一些操作,MyIterator中定義了一系列迭代操作,且持有Collection實(shí)例,我們來(lái)看看實(shí)現(xiàn)代碼:
兩個(gè)接口:

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(); 
 
 //取得第一個(gè)元素 
 public Object first(); 
} 

兩個(gè)實(shí)現(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); 
 } 
 
} 

測(cè)試類(lèi):

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()); 
 } 
 } 
} 

此處我們貌似模擬了一個(gè)集合類(lèi)的過(guò)程,感覺(jué)是不是很爽?其實(shí)JDK中各個(gè)類(lèi)也都是這些基本的東西,加一些設(shè)計(jì)模式,再加一些優(yōu)化放到一起的,只要我們把這些東西學(xué)會(huì)了,掌握好了,我們也可以寫(xiě)出自己的集合類(lèi),甚至框架!

介紹
意圖:提供一種方法順序訪(fǎng)問(wèn)一個(gè)聚合對(duì)象中各個(gè)元素, 而又無(wú)須暴露該對(duì)象的內(nèi)部表示。

主要解決:不同的方式來(lái)遍歷整個(gè)整合對(duì)象。

何時(shí)使用:遍歷一個(gè)聚合對(duì)象。

如何解決:把在元素之間游走的責(zé)任交給迭代器,而不是聚合對(duì)象。

關(guān)鍵代碼:定義接口:hasNext, next。

應(yīng)用實(shí)例:JAVA 中的 iterator。

優(yōu)點(diǎn):

1、它支持以不同的方式遍歷一個(gè)聚合對(duì)象。

2、迭代器簡(jiǎn)化了聚合類(lèi)。

3、在同一個(gè)聚合上可以有多個(gè)遍歷。

4、在迭代器模式中,增加新的聚合類(lèi)和迭代器類(lèi)都很方便,無(wú)須修改原有代碼。

缺點(diǎn):由于迭代器模式將存儲(chǔ)數(shù)據(jù)和遍歷數(shù)據(jù)的職責(zé)分離,增加新的聚合類(lèi)需要對(duì)應(yīng)增加新的迭代器類(lèi),類(lèi)的個(gè)數(shù)成對(duì)增加,這在一定程度上增加了系統(tǒng)的復(fù)雜性。

使用場(chǎng)景:

1、訪(fǎng)問(wèn)一個(gè)聚合對(duì)象的內(nèi)容而無(wú)須暴露它的內(nèi)部表示。

2、需要為聚合對(duì)象提供多種遍歷方式。

3、為遍歷不同的聚合結(jié)構(gòu)提供一個(gè)統(tǒng)一的接口。

注意事項(xiàng):迭代器模式就是分離了集合對(duì)象的遍歷行為,抽象出一個(gè)迭代器類(lèi)來(lái)負(fù)責(zé),這樣既可以做到不暴露集合的內(nèi)部結(jié)構(gòu),又可讓外部代碼透明地訪(fǎng)問(wèn)集合內(nèi)部的數(shù)據(jù)。

以上所述是小編給大家介紹的Java設(shè)計(jì)模式——迭代器模式詳解整合,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • 詳解Maven安裝教程及是否安裝成功

    詳解Maven安裝教程及是否安裝成功

    這篇文章主要介紹了詳解Maven安裝教程及是否安裝成功,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-12-12
  • java 連接Redis的小例子

    java 連接Redis的小例子

    這篇文章介紹了java 連接Redis的小例子,有需要的朋友可以參考一下
    2013-09-09
  • SpringBoot 整合 Netty 多端口監(jiān)聽(tīng)的操作方法

    SpringBoot 整合 Netty 多端口監(jiān)聽(tīng)的操作方法

    Netty提供異步的、基于事件驅(qū)動(dòng)的網(wǎng)絡(luò)應(yīng)用程序框架,用以快速開(kāi)發(fā)高性能、高可靠性的網(wǎng)絡(luò) IO 程序,是目前最流行的 NIO 框架,這篇文章主要介紹了SpringBoot 整和 Netty 并監(jiān)聽(tīng)多端口,需要的朋友可以參考下
    2023-10-10
  • 關(guān)于Spring事務(wù)隔離、傳播屬性與@Transactional注解

    關(guān)于Spring事務(wù)隔離、傳播屬性與@Transactional注解

    這篇文章主要介紹了關(guān)于事務(wù)隔離、Spring傳播屬性與@Transactional注解,如果一組處理步驟或者全部發(fā)生或者一步也不執(zhí)行,我們稱(chēng)該組處理步驟為一個(gè)事務(wù),需要的朋友可以參考下
    2023-05-05
  • Spring?Boot?Yaml配置高級(jí)用法

    Spring?Boot?Yaml配置高級(jí)用法

    這篇文章主要介紹了Spring?Boot?Yaml配置高級(jí)用法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • Java深入理解代碼塊的使用細(xì)節(jié)

    Java深入理解代碼塊的使用細(xì)節(jié)

    所謂代碼塊是指用"{}"括起來(lái)的一段代碼,根據(jù)其位置和聲明的不同,可以分為普通代碼塊、構(gòu)造塊、靜態(tài)塊、和同步代碼塊。如果在代碼塊前加上?synchronized關(guān)鍵字,則此代碼塊就成為同步代碼塊
    2022-05-05
  • Java安全編碼:防范Java安全漏洞的最佳實(shí)踐

    Java安全編碼:防范Java安全漏洞的最佳實(shí)踐

    Java作為一種跨平臺(tái)的編程語(yǔ)言,在廣泛應(yīng)用的同時(shí),也會(huì)從時(shí)至?xí)r出現(xiàn)安全漏洞,這些漏洞可能會(huì)對(duì)Java應(yīng)用程序的安全性造成嚴(yán)重威脅,因此,必須采取必要的措施,以確保Java應(yīng)用程序的安全性,以最佳實(shí)踐來(lái)防范Java安全漏洞,是應(yīng)對(duì)安全威脅的最好方法之一,
    2024-01-01
  • SpringBoot在接收參數(shù)的七種方式詳解

    SpringBoot在接收參數(shù)的七種方式詳解

    這篇文章主要介紹了SpringBoot在接收參數(shù)的七種方式詳解,隨著前后端的分離,接口方式開(kāi)發(fā)成為普遍的開(kāi)發(fā)形式,前端相對(duì)于后端來(lái)說(shuō),常用的接口傳參方式就一定要了解和熟悉,下面?我們梳理了常用的七種?Controller層接受參數(shù)的方式,需要的朋友可以參考下
    2023-10-10
  • 詳解Maven多模塊打包遇到的問(wèn)題解決方法

    詳解Maven多模塊打包遇到的問(wèn)題解決方法

    這篇文章主要介紹了詳解Maven多模塊打包遇到的問(wèn)題解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • java高并發(fā)InterruptedException異常引發(fā)思考

    java高并發(fā)InterruptedException異常引發(fā)思考

    這篇文章主要為大家介紹了java高并發(fā)InterruptedException異常引發(fā)思考,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08

最新評(píng)論

阿巴嘎旗| 汽车| 论坛| 湄潭县| 聂荣县| 申扎县| 松阳县| 苏尼特左旗| 焦作市| 什邡市| 保定市| 长汀县| 巴东县| 方正县| 聊城市| 西昌市| 凉山| 湘潭县| 富蕴县| 平和县| 西乌珠穆沁旗| 哈巴河县| 房产| 佛坪县| 伊宁市| 宜兰市| 长治县| 祁连县| 三河市| 嘉义县| 阿坝县| 宝应县| 恭城| 铜川市| 邳州市| 平乐县| 兖州市| 汤阴县| 温州市| 灵璧县| 常宁市|