java如何實現(xiàn)迭代器模式

這篇文章主要介紹java如何實現(xiàn)迭代器模式,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

公司主營業(yè)務(wù):網(wǎng)站建設(shè)、成都網(wǎng)站制作、移動網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴謹、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)推出岳普湖免費做網(wǎng)站回饋大家。

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

類型:行為類模式

類圖:

java如何實現(xiàn)迭代器模式

如果要問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)點:

        簡化了遍歷方式,對于對象集合的遍歷,還是比較麻煩的,對于數(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)在需要我們自己去實踐迭代器模式的場景還是比較少見的,我們只需要使用語言中已有的容器和迭代器就可以了。

以上是“java如何實現(xiàn)迭代器模式”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

新聞名稱:java如何實現(xiàn)迭代器模式
地址分享:http://bm7419.com/article42/jccphc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供動態(tài)網(wǎng)站、外貿(mào)建站、品牌網(wǎng)站制作建站公司、移動網(wǎng)站建設(shè)、小程序開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)