4.4 Java 迭代器模式 (Iterator)

定义:

迭代器模式是一种行为型设计模式,它提供一种顺序访问聚合对象(例如列表、集合)中各个元素的方法,而无需暴露其底层表示。它将遍历逻辑与聚合对象分离,使得你可以定义不同的迭代器来以不同的方式遍历同一个聚合对象。

解决什么问题:

  • 当你需要访问一个聚合对象的所有元素,而不想暴露其内部结构时。
  • 当你需要为同一个聚合对象提供多种遍历方式时。
  • 当你需要将遍历逻辑与聚合对象分离时。

优点:

  • 简化遍历过程: 迭代器模式提供了一种统一的方式来遍历不同的聚合对象。
  • 解耦遍历逻辑: 迭代器模式将遍历逻辑与聚合对象分离,使得它们可以独立变化。
  • 支持多种遍历方式: 你可以为同一个聚合对象定义不同的迭代器,以实现不同的遍历方式。

缺点:

  • 增加代码复杂度: 迭代器模式需要创建额外的迭代器类。

使用时需要注意:

  • 迭代器的创建: 迭代器通常由聚合对象创建,并返回给客户端。
  • 迭代器的状态: 迭代器需要维护自身的状态,例如当前遍历到的元素。
  • 并发访问: 如果多个线程同时访问同一个迭代器,需要进行同步控制。

使用场景:

  • 遍历列表、集合、数组等聚合对象。
  • 实现自定义的迭代器,以满足特定的遍历需求。

代码示例:

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

// 定义一个迭代器接口
interface MyIterator<E> {
    boolean hasNext();
    E next();
}

// 定义一个具体的迭代器
class MyListIterator<E> implements MyIterator<E> {
    private List<E> list;
    private int index;

    public MyListIterator(List<E> list) {
        this.list = list;
        this.index = 0;
    }

    @Override
    public boolean hasNext() {
        return index < list.size();
    }

    @Override
    public E next() {
        return list.get(index++);
    }
}

// 定义一个聚合类
class MyList<E> implements Iterable<E> {
    private List<E> list;

    public MyList() {
        this.list = new ArrayList<>();
    }

    public void add(E element) {
        list.add(element);
    }

    @Override
    public Iterator<E> iterator() {
        return new MyListIterator<>(list);
    }
}

public class IteratorPatternDemo {
    public static void main(String[] args) {
        // 创建一个聚合对象
        MyList<String> myList = new MyList<>();
        myList.add("A");
        myList.add("B");
        myList.add("C");

        // 使用迭代器遍历聚合对象
        Iterator<String> iterator = myList.iterator();
        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        }
    }
}

在这个例子中:

  • MyIterator 接口定义了迭代器的基本操作:hasNext() 和 next()
  • MyListIterator 类实现了 MyIterator 接口,并使用一个索引来跟踪当前遍历到的元素。
  • MyList 类实现了 Iterable 接口,并提供了一个 iterator() 方法来创建 MyListIterator 对象。

通过使用迭代器模式,我们可以将遍历逻辑与 MyList 类分离,并提供一种统一的方式来遍历 MyList 对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值