成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

迭代器模式

xcc3641 / 1276人閱讀

摘要:迭代器模式的結(jié)構(gòu)抽象容器一般是一個(gè)接口,提供一個(gè)方法,例如中的接口,接口,接口等。假如我們要實(shí)現(xiàn)一個(gè)這樣的新的容器,當(dāng)然也需要引入迭代器模式,給我們的容器實(shí)現(xiàn)一個(gè)迭代器。

定義:提供一種方法訪問一個(gè)容器對(duì)象中各個(gè)元素,而又不暴露該對(duì)象的內(nèi)部細(xì)節(jié)。

類型:行為類模式。

類圖

提到迭代器,首先它是與集合相關(guān)的,集合也叫聚集、容器等,我們可以將集合看成是一個(gè)可以包容對(duì)象的容器,例如List,Set,Map,甚至數(shù)組都可以叫做集合,而迭代器的作用就是把容器中的對(duì)象一個(gè)一個(gè)地遍歷出來(lái)。

迭代器模式的結(jié)構(gòu)

抽象容器:一般是一個(gè)接口,提供一個(gè)iterator()方法,例如java中的Collection接口,List接口,Set接口等。

具體容器:就是抽象容器的具體實(shí)現(xiàn)類,比如List接口的有序列表實(shí)現(xiàn)ArrayList,List接口的鏈表實(shí)現(xiàn)LinkList,Set接口的哈希列表的實(shí)現(xiàn)HashSet等。

抽象迭代器:定義遍歷元素所需要的方法,一般來(lái)說(shuō)會(huì)有這么三個(gè)方法:取得第一個(gè)元素的方法first(),取得下一個(gè)元素的方法next(),判斷是否遍歷結(jié)束的方法isDone()(或者叫hasNext()),移出當(dāng)前對(duì)象的方法remove(),

迭代器實(shí)現(xiàn):實(shí)現(xiàn)迭代器接口中定義的方法,完成集合的迭代。

代碼實(shí)現(xiàn)

容器類接口中主要有三個(gè)方法:添加對(duì)象方法add、刪除對(duì)象方法remove、取得迭代器方法iterator。Iterator是迭代器接口,主要有兩個(gè)方法:取得迭代對(duì)象方法next,判斷是否迭代完成方法hasNext。

迭代器模式的優(yōu)點(diǎn)

1.簡(jiǎn)化了遍歷方式,對(duì)于對(duì)象集合的遍歷,還是比較麻煩的,對(duì)于數(shù)組或者有序列表,我們尚可以通過(guò)游標(biāo)來(lái)取得,但用戶需要在對(duì)集合了解很清楚的前提下,自行遍歷對(duì)象,但是對(duì)于hash表來(lái)說(shuō),用戶遍歷起來(lái)就比較麻煩了。而引入了迭代器方法后,用戶用起來(lái)就簡(jiǎn)單的多了。

2.封裝性良好,用戶只需要得到迭代器就可以遍歷,而對(duì)于遍歷算法則不用去關(guān)心。

3.可以提供多種遍歷方式,比如說(shuō)對(duì)有序列表,我們可以根據(jù)需要提供正序遍歷,倒序遍歷兩種迭代器,用戶用起來(lái)只需要得到我們實(shí)現(xiàn)好的迭代器,就可以方便的對(duì)集合進(jìn)行遍歷了。

迭代器模式的缺點(diǎn)

對(duì)于比較簡(jiǎn)單的遍歷(像數(shù)組或者有序列表),使用迭代器方式遍歷較為繁瑣,大家可能都有感覺,像ArrayList,我們寧可愿意使用for循環(huán)和get方法來(lái)遍歷集合。

迭代器模式的適用場(chǎng)景

迭代器模式是與集合共生共死的,一般來(lái)說(shuō),我們只要實(shí)現(xiàn)一個(gè)集合,就需要同時(shí)提供這個(gè)集合的迭代器,就像java中的Collection,List、Set、Map等,這些集合都有自己的迭代器。假如我們要實(shí)現(xiàn)一個(gè)這樣的新的容器,當(dāng)然也需要引入迭代器模式,給我們的容器實(shí)現(xiàn)一個(gè)迭代器。

但是,由于容器與迭代器的關(guān)系太密切了,所以大多數(shù)語(yǔ)言在實(shí)現(xiàn)容器的時(shí)候都給提供了迭代器,并且這些語(yǔ)言提供的容器和迭代器在絕大多數(shù)情況下就可以滿足我們的需要,所以現(xiàn)在需要我們自己去實(shí)踐迭代器模式的場(chǎng)景還是比較少見的,我們只需要使用語(yǔ)言中已有的容器和迭代器就可以了。

歡迎加入學(xué)習(xí)交流群569772982,大家一起學(xué)習(xí)交流。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/67786.html

相關(guān)文章

  • Python進(jìn)階:設(shè)計(jì)模式迭代模式

    摘要:抓住了迭代器模式的本質(zhì),即是迭代,賦予了它極高的地位。輸出結(jié)果輸出結(jié)果小結(jié)迭代器模式幾乎是種設(shè)計(jì)模式中最常用的設(shè)計(jì)模式,本文主要介紹了是如何運(yùn)用迭代器模式,并介紹了模塊生成迭代器的種方法,以及種生成迭代器的內(nèi)置方法。 showImg(https://segmentfault.com/img/bVbmv7W?w=4272&h=2848); 在軟件開發(fā)領(lǐng)域中,人們經(jīng)常會(huì)用到這一個(gè)概念——設(shè)...

    pubdreamcc 評(píng)論0 收藏0
  • Python進(jìn)階:設(shè)計(jì)模式迭代模式

    摘要:抓住了迭代器模式的本質(zhì),即是迭代,賦予了它極高的地位。輸出結(jié)果輸出結(jié)果小結(jié)迭代器模式幾乎是種設(shè)計(jì)模式中最常用的設(shè)計(jì)模式,本文主要介紹了是如何運(yùn)用迭代器模式,并介紹了模塊生成迭代器的種方法,以及種生成迭代器的內(nèi)置方法。 showImg(https://segmentfault.com/img/bVbmv7W?w=4272&h=2848); 在軟件開發(fā)領(lǐng)域中,人們經(jīng)常會(huì)用到這一個(gè)概念——設(shè)...

    sherlock221 評(píng)論0 收藏0
  • 每天一個(gè)設(shè)計(jì)模式·迭代模式

    摘要:迭代器模式原文地址更多設(shè)計(jì)模式系列教程更多免費(fèi)教程博主按每天一個(gè)設(shè)計(jì)模式旨在初步領(lǐng)會(huì)設(shè)計(jì)模式的精髓,目前采用靠這吃飯和純粹喜歡兩種語(yǔ)言實(shí)現(xiàn)。迭代器模式常見和常用的有內(nèi)部迭代器外部迭代器倒序迭代器等等。 迭代器模式·原文地址 更多《設(shè)計(jì)模式系列教程》 更多免費(fèi)教程 博主按:《每天一個(gè)設(shè)計(jì)模式》旨在初步領(lǐng)會(huì)設(shè)計(jì)模式的精髓,目前采用javascript(靠這吃飯)和python(純粹喜歡...

    沈儉 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<