Iterator 其實很簡單(最好理解的工廠模式的例子)


  我們都知道Iterator是一個典型的工廠模式的例子。那么我們可能會被這兩個名詞搞暈。首先,我們會奇怪,為什么iterator可以遍歷不同類型的結合,其次,出入程序猿的我們根本不知道工廠模式是什么。

  首先,我們先放下疑問,來看一下最基本的兩個集合。那就是ArrayList和LinkList。需要學習的是什么呢?

  1.ArrayList是基於數組實現,LinkList是基於鏈表實現。

  2.實現不同,所以對集合的操作也就不同,如:增,刪等。

  3.實現不同,遍歷方式也不同,但。。。。。。。我們都可以用iterator來遍歷,是不是很神奇。

 

  重點來了,說了這么多,那到底為什么iterator可以實現? 很簡單,那就是------------------------------------interface

  我們都知道ArrayList和LinkList都繼承了Cllection接口,實現接口中的add(),size()等方法。然后呢?其實Cllection接口中還有iterator方法,此方法返回一個Iterator類型的接口,對接口,你沒有看錯,類似於這樣:public Iterator iterator() 其中,Iterator是一個接口

  那么大佬要說了,接口怎么可以作為返回值呢?確實是的,接口是不能作為返回值的,所以我上面說的是錯的。正確的理解是其實函數返回的不是接口,而是實現了該接口的一個對象,這時這個Iterator 就代表着這個對象。只要是實現該接口的對象都可以賦給n,這種寫法是面向對象特有的東西,通常叫作多態。

  這個問題解釋清楚了,繼續說,ArrayList和LinkList都繼承了Cllection接口,所以他們里面也要有iterator這個方法。我們知道Iterator里面有hasnext(),next(),remove()方法,所以根據上面的要求,ArrayList和LinkList中都要有一個類繼承Iterator接口並且這個類要包含hasnext(),next(),remove()方法。

  到這里我們可以往回看了,我們常寫的代碼是:Iterator it = al.iterator() 或 Iterator it = ll.iterator() 其中,al是一個ArrayList類型的集合,ll是一個LinkList類型的集合。

  Iterator it = list.iterator();
  while(it.hasNext()){
    //using “it.next();”do some businesss logic
  }

  1.ArrayList和LinkList都繼承了Cllection接口-->都包含各自的iterator()方法

  2.ArrayList和LinkList里面都有一個方法繼承了Iterator,且方法實現hasnext(),next(),remove()。

  所以Iterator it = al.iterator() 或 Iterator it = ll.iterator()成立。

  重要:Iterator是一個接口,但是函數返回的不是接口,而是實現了該接口的一個對象!!!!!!!!!!!!!!!!

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM