专业编程基础技术教程

网站首页 > 基础教程 正文

【设计模式】java代码示例什么是迭代器模式

ccvgpt 2024-08-07 18:58:21 基础教程 10 ℃

迭代器模式就像我们平时去图书馆借书一样。图书馆里有很多书,但我们不可能一次性把所有书都带出来看,所以图书馆提供了一个“借书员”(迭代器)来帮助我们一本一本地借书。这个“借书员”知道如何按顺序找到每一本书,并且每次只给我们一本书。这样,我们就可以通过“借书员”来遍历图书馆中的所有书籍,而不需要关心图书馆内部是如何存放这些书的。

在编程中,迭代器模式也是这样一种思想。当我们需要遍历一个聚合对象(如列表、集合等)中的元素时,我们不需要了解该聚合对象的内部结构,只需要通过迭代器来按顺序访问每一个元素即可。这样,我们就将遍历的逻辑与聚合对象的内部结构解耦了,使得代码更加灵活和可重用。

【设计模式】java代码示例什么是迭代器模式

Java示例代码

首先,我们定义一个迭代器接口(Iterator),它规定了遍历元素所需的方法:

public interface Iterator<T> {  
    boolean hasNext(); // 判断是否还有下一个元素  
    T next(); // 返回下一个元素  
}

然后,我们定义一个聚合对象的接口(如List),它包含一个返回迭代器的方法:

public interface List<T> {  
    Iterator<T> iterator(); // 返回一个迭代器,用于遍历列表中的元素  
    // ... 其他方法,如add、remove等  
}

接下来,我们创建一个具体的聚合对象类(如ArrayList),它实现了List接口,并提供了相应的迭代器实现:

import java.util.Iterator;  
  
public class ArrayList<T> implements List<T> {  
    private Object[] elements;  
    private int size;  
  
    // 构造函数、add、remove等方法省略...  
  
    @Override  
    public Iterator<T> iterator() {  
        return new Iterator<T>() {  
            int currentIndex = 0;  
  
            @Override  
            public boolean hasNext() {  
                return currentIndex < size;  
            }  
  
            @Override  
            public T next() {  
                if (!hasNext()) {  
                    throw new IllegalStateException("No more elements");  
                }  
                return (T) elements[currentIndex++];  
            }  
        };  
    }  
      
    // ... 其他方法实现省略  
}

最后,我们创建一个客户端类来演示如何使用迭代器遍历列表中的元素:

public class Client {  
    public static void main(String[] args) {  
        List<String> list = new ArrayList<>(); // 假设ArrayList已经实现了List接口和相应方法  
        list.add("Book 1");  
        list.add("Book 2");  
        list.add("Book 3");  
  
        Iterator<String> iterator = list.iterator();  
        while (iterator.hasNext()) {  
            String book = iterator.next();  
            System.out.println("Reading: " + book);  
        }  
    }  
}

在这个例子中,ArrayList是聚合对象,它实现了List接口,并提供了自己的迭代器实现。客户端代码通过调用list.iterator()方法获取迭代器,然后使用while循环和迭代器的hasNext()next()方法来遍历列表中的每一个元素。这样,客户端代码就不需要关心ArrayList的内部结构,只需要通过迭代器来访问元素即可。

Tags:

最近发表
标签列表