1. 程式人生 > >java設計模式之迭代器

java設計模式之迭代器

本文介紹行為型模式的一種模式——迭代器模式。該模式主要用於對某一物件集合進行遍歷,將物件的資料儲存和遍歷進行分離。在Java語言中有著較高的應用頻率。

1、定義:提供一種方法順序地訪問一個聚合物件中的各個元素而不需要暴露該物件的內部表示。

2、模式結構:

(1)Iterator(抽象迭代器):定義訪問和遍歷元素的介面,宣告獲取元素的方法。

(2)ConcreteIterator(具體迭代器):實現抽象迭代器介面,完成遍歷並跟蹤元素當前位置。

(3)Aggregate(抽象聚合類):儲存物件,建立迭代器物件的介面,宣告建立迭代器物件的方法。

(4)ConcreteAggregate(具體聚合類):實現建立迭代器物件的介面,實現其方法。

3、案例分析:

(1)迭代器介面 MyIterator

public interface MyIterator
{
    void first();//訪問第一個元素
    void next();//訪問下一個元素
    boolean isLast();//是否為最後一個元素
    Object currentItem();//獲取當前元素
}
(2)聚合介面 MyCollection

public interface MyCollection
{
    //用於返回一個MyIterator迭代器物件
    MyIterator createIterator();
}
(3)具體聚合類 AniCollection

public class AniCollection implements MyCollection
{
    public MyIterator createIterator()
    {
        return new AniIterator();
    }
}
(4)具體迭代器類 AniIterator

public class AniIterator implements MyIterator
{
    private Object [] obj = {"dog","pig","cat","monkey"};
    private int currentIndex = 0;
    public void first()
    {
        currentIndex = 0;
    }
    public void next()
    {
        if(currentIndex<obj.length)
        {
            currentIndex++;
        }
    }
    public boolean isLast()
    {
        return currentIndex == obj.length;
    }
    public Object currentItem()
    {
        return obj[currentIndex];
    }
 }
(5)測試類 Client

public class Client
{
    public static void process(MyCollection collection)
    {
        MyIterator it = collection.createIterator();
        while(!it.isLast())
        {
            System.out.println(it.currentItem().toString());
            it.next();
        }
    }
 
    public static void main(String [] args)
    {
        MyCollection collection = new AniCollection();
        process(collection);
    }
}
執行結果:

4、模式優缺點:

(1)優點:可以以不同的方式遍歷一個聚合物件;同一個聚合上可以有多個遍歷。

(2)缺點:增加新的聚合類需要對應增加新的迭代器類。

5、模式應用:

JDK 中的 Collection 介面中有方法 iterator()就是用於返回一個迭代器物件,來遍歷集合的所有元素。一般我們很少自己定義迭代器,使用JDK內建的迭代器就可以了。