Java源代碼-迭代器模式


  Java無疑是最成功的項目之一了,而在其中學習設計模式和架構設計,無疑是最好不過了。

  概念:

  提供一種方法訪問容器中的各個元素,而又不暴露該對象的內部細節。

  使用場景:

  和容器經常在一起,我們定義了一個容器,還要提供外部訪問的方法,迭代器模式無疑是最好不過了。

  迭代器模式的UML類圖:

  

  下面的代碼是Java集合框架內部實現迭代器模式的精簡版:

public interface Iterator<E> {//迭代器接口精簡版
    boolean hasNext();
    E next();
}
public interface List<E> {//容器接口精簡版
    Iterator<E> iterator();
}
public class ArrayList<E> implements List<E> {
    private Object[] array;
    
    public ArrayList(){
        this.array=new Object[5];
        this.array[0]="a";
        this.array[1]="b";
        this.array[2]="c";
        this.array[3]="d";
        this.array[4]="e";
    }
    public Iterator<E> iterator() {
        return new ArrayIterator();
    }
    public class ArrayIterator implements Iterator<E>{
        private int cursor=0;
        public boolean hasNext() {
            if(cursor<array.length){
                return true;
            }
            return false;
        }
        @SuppressWarnings("unchecked")
        public E next() {
            E e=(E) array[cursor++];            
            return e;
        }
    }
}

  內部類的好處:

  如果沒有內部類,要實現迭代器模式,有2種方式,第一,在容器類中定義一些方法,那就需要定義一些全局成員變量來記錄光標等等一些數據,導致容器類繁雜,不易擴展。第二,與容器類平級建立一個迭代器類,這就需要類與類之間的通信,提升了容器類與迭代器類之間的耦合度。

  而,內部類,可以直接訪問到容器類的成員變量與成員函數,內部類只需實現自己的方法即可。

  我認為,在一個類中,單純的成員變量與成員函數滿足不了日益復雜的需求,有時候,類內部中的概念也需要變量與函數,相信這就是內部類的意義所在。

 

 

 

 

                                                           

                                                                                                   

                                                              

 


免責聲明!

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



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