Java迭代器设计模式

Java迭代器设计模式

定义

迭代器模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构。 这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。

对应角色

  • 抽象迭代器(Iterator)角色:该角色负责定义访问和遍历元素的接口;
  • 具体迭代器(Concrete Iterator)角色:该角色实现 Iterator 接口,完成容器元素的遍历;
  • 抽象聚集(Aggregate)角色:该角色提供创建迭代器角色的接口;
  • 具体聚集(ConcreteAggregate)角色:该角色实现抽象聚集类,返回一个具体迭代器的实例。

优缺点

优点

  • 分离了集合对象的遍历行为,抽象出了迭代器负责集合对象的遍历,可以让外部的代码透明地访问集合内部的数据;
  • 迭代器为遍历不同的聚合对象提供了一个统一的迭代接口,从而简化了客户端的调用;
  • 访问一个聚合对象时,无需暴露该聚合对象的内部表示,从而提高聚合对象的封装性。

缺点

  • 类的个数成对增加;
  • 迭代器模式将存储数据和遍历数据两个职责拆分,增加了系统复杂性;
  • 如果新添加一个集合类,需要增加该集合类对应的迭代器类,类的个数成对增加,在一定程度上增加了系统复杂性。

应用场景

  • 当集合内部为复杂的数据结构,且你希望对客户端隐藏其复杂性时,可以使用迭代器模式;
  • 如果希望有多种遍历方式可以访问聚合对象,可以使用迭代器模式;
  • 如果希望不同的聚合对象有一个统一的遍历接口,可以使用迭代器模式。

实例


import java.util.Iterator;

public class MyIterator implements Iterator {
    private int[] data;
    private int index = 0;

    public MyIterator(int[] data) {
        this.data = data;
    }

    public boolean hasNext() {
        if (index < data.length) {
            return true;
        } else {
            return false;
        }
    }

    public Object next() {
        if (this.hasNext()) {
            return data[index++];
        } else {
            return null;
        }
    }

    public void remove() {
        throw new UnsupportedOperationException("remove unsupported");
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

幽·

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值