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

Java設計模式之迭代器模式_動力節(jié)點Java學院整理

 更新時間:2017年08月16日 10:44:19   作者:zhengzhb  
這篇文章主要介紹了Java設計模式之迭代器模式_動力節(jié)點Java學院整理,需要的朋友可以參考下

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

類型:行為類模式

類圖:

       如果要問Java中使用最多的一種模式,答案不是單例模式,也不是工廠模式,更不是策略模式,而是迭代器模式,先來看一段代碼吧:

public static void print(Collection coll){ 
 Iterator it = coll.iterator(); 
 while(it.hasNext()){ 
  String str = (String)it.next(); 
  System.out.println(str); 
 } 
} 

        這個方法的作用是循環(huán)打印一個字符串集合,里面就用到了迭代器模式,java語言已經(jīng)完整地實現(xiàn)了迭代器模式,Iterator翻譯成漢語就是迭代器的意思。提到迭代器,首先它是與集合相關(guān)的,集合也叫聚集、容器等,我們可以將集合看成是一個可以包容對象的容器,例如List,Set,Map,甚至數(shù)組都可以叫做集合,而迭代器的作用就是把容器中的對象一個一個地遍歷出來。 

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

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

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

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

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

代碼實現(xiàn)

interface Iterator { 
 public Object next(); 
 public boolean hasNext(); 
} 
class ConcreteIterator implements Iterator{ 
 private List list = new ArrayList(); 
 private int cursor =0; 
 public ConcreteIterator(List list){ 
  this.list = list; 
 } 
 public boolean hasNext() { 
  if(cursor==list.size()){ 
   return false; 
  } 
  return true; 
 } 
 public Object next() { 
  Object obj = null; 
  if(this.hasNext()){ 
   obj = this.list.get(cursor++); 
  } 
  return obj; 
 } 
} 
interface Aggregate { 
 public void add(Object obj); 
 public void remove(Object obj); 
 public Iterator iterator(); 
} 
class ConcreteAggregate implements Aggregate { 
 private List list = new ArrayList(); 
 public void add(Object obj) { 
  list.add(obj); 
 } 
 
 public Iterator iterator() { 
  return new ConcreteIterator(list); 
 } 
 
 public void remove(Object obj) { 
  list.remove(obj); 
 } 
} 
public class Client { 
 public static void main(String[] args){ 
  Aggregate ag = new ConcreteAggregate(); 
  ag.add("小明"); 
  ag.add("小紅"); 
  ag.add("小剛"); 
  Iterator it = ag.iterator(); 
  while(it.hasNext()){ 
   String str = (String)it.next(); 
   System.out.println(str); 
  } 
 } 
} 

       上面的代碼中,Aggregate是容器類接口,大家可以想象一下Collection,List,Set等,Aggregate就是他們的簡化版,容器類接口中主要有三個方法:添加對象方法add、刪除對象方法remove、取得迭代器方法iterator。Iterator是迭代器接口,主要有兩個方法:取得迭代對象方法next,判斷是否迭代完成方法hasNext,大家可以對比java.util.List和java.util.Iterator兩個接口自行思考。 

迭代器模式的優(yōu)缺點

        迭代器模式的優(yōu)點有:

  • 簡化了遍歷方式,對于對象集合的遍歷,還是比較麻煩的,對于數(shù)組或者有序列表,我們尚可以通過游標來取得,但用戶需要在對集合了解很清楚的前提下,自行遍歷對象,但是對于hash表來說,用戶遍歷起來就比較麻煩了。而引入了迭代器方法后,用戶用起來就簡單的多了。
  • 可以提供多種遍歷方式,比如說對有序列表,我們可以根據(jù)需要提供正序遍歷,倒序遍歷兩種迭代器,用戶用起來只需要得到我們實現(xiàn)好的迭代器,就可以方便的對集合進行遍歷了。
  • 封裝性良好,用戶只需要得到迭代器就可以遍歷,而對于遍歷算法則不用去關(guān)心。

        迭代器模式的缺點:

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

迭代器模式的適用場景

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

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

總結(jié)

以上所述是小編給大家介紹的Java設計模式之迭代器模式_動力節(jié)點Java學院整理,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • mybatis+springboot中使用mysql的實例

    mybatis+springboot中使用mysql的實例

    在軟件開發(fā)中,數(shù)據(jù)庫的引入是必不可少的,這里來展現(xiàn)一下通過mybatis框架在springboot中使用mysql,具有一定的參考價值,感興趣的可以了解一下
    2021-07-07
  • (starters)springboot-starter整合阿里云datahub方式

    (starters)springboot-starter整合阿里云datahub方式

    這篇文章主要介紹了(starters)springboot-starter整合阿里云datahub方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • Java獲取文件ContentType案例

    Java獲取文件ContentType案例

    這篇文章主要介紹了Java獲取文件ContentType案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • 基于IO版的用戶登錄注冊實例(Java)

    基于IO版的用戶登錄注冊實例(Java)

    下面小編就為大家?guī)硪黄贗O版的用戶登錄注冊實例(Java)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • 如何用java給文件加密的簡單實現(xiàn)

    如何用java給文件加密的簡單實現(xiàn)

    文件加密,簡單來說就是把文件讀取出來,把讀取出來的字節(jié)碼數(shù)組進行遍歷,把每一個碼值和一個秘鑰(隨便一個數(shù))進行異或運算,將運算后的結(jié)果全部寫入到文件里,這篇文章主要介紹了如何用java給文件加密的簡單實現(xiàn),需要的朋友可以參考下
    2023-12-12
  • 詳解Spring配置事務的五種方式

    詳解Spring配置事務的五種方式

    這篇文章主要為大家詳細介紹了Spring配置事務的五種方式,感興趣的小伙伴們可以參考一下
    2016-06-06
  • Java使用POI實現(xiàn)導出Excel的方法詳解

    Java使用POI實現(xiàn)導出Excel的方法詳解

    在項目開發(fā)中往往需要使用到Excel的導入和導出,導入就是從Excel中導入到DB中,而導出就是從DB中查詢數(shù)據(jù)然后使用POI寫到Excel上。本文將利用POI實現(xiàn)導出Excel,需要的可以參考一下
    2022-10-10
  • java驗證用戶是否已經(jīng)登錄 java實現(xiàn)自動登錄

    java驗證用戶是否已經(jīng)登錄 java實現(xiàn)自動登錄

    這篇文章主要介紹了java驗證用戶是否已經(jīng)登錄,java實現(xiàn)自動登錄,感興趣的小伙伴們可以參考一下
    2016-04-04
  • Spring?Boot?配置文件之類型、加載順序與最佳實踐記錄

    Spring?Boot?配置文件之類型、加載順序與最佳實踐記錄

    Spring?Boot?的配置文件是靈活且強大的工具,通過合理的配置管理,可以讓應用開發(fā)和部署更加高效,無論是簡單的屬性配置,還是復雜的多環(huán)境管理,Spring?Boot都提供了便捷的解決方案,本文介紹Spring?Boot?配置文件:類型、加載順序與最佳實踐,感興趣的朋友一起看看吧
    2025-04-04
  • Spring從入門到源碼之IOC基本用法

    Spring從入門到源碼之IOC基本用法

    這篇文章給大家介紹了Spring從入門到源碼之IOC基本用法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2022-01-01

最新評論

永靖县| 介休市| 舟曲县| 海伦市| 集贤县| 康平县| 麻阳| 探索| 正安县| 凭祥市| 公安县| 响水县| 加查县| 华宁县| 长葛市| 满城县| 聂荣县| 云梦县| 乌鲁木齐县| 蚌埠市| 同仁县| 沂南县| 腾冲县| 神池县| 南江县| 松桃| 诸城市| 大同县| 徐闻县| 清徐县| 九江县| 舟曲县| 涞源县| 双鸭山市| 措美县| 突泉县| 南阳市| 织金县| 奎屯市| 商都县| 平遥县|