Iterator设计模式

Iterator设计模式

客户端希望遍历被放入容器/集合类的一组ADT对象,无需关心容器的具体类型
也就是说,不管对象被放进哪里,都应该提供同样的遍历方式

类结构

  • 可迭代接口
  • 具体类
  • 迭代器接口
  • 具体迭代器

其中可迭代接口,迭代器接口,java中已经实现,我们直接使用即可
可迭代接口:Iterable<E>,需要实现方法Iterator<E> iterator()
迭代器接口:Iterator<E>,通常需要实现2个方法

  • boolean hasNext()
  • E next()
    还有两个default方法,选择实现
  • void remove()
  • void forEachRemaining(Consumer<? super E> action)

具体类实现Iterable接口

// Aggregate.java
public class Aggregate implements Iterable<Any> {
	@Override
	public Iterator<Any> iterator() {
		// 据情况选择把什么传给iterator,这里比较粗暴
		return new AggregateIterator(this);
	}
}

具体迭代器

// AggregateIterator.java
public class AggregateIterator implements Iterator<Any> {
	// some fields
	// ...
	public AggregateIterator(Aggregate aggregate) {...}
	@Override
	public boolean hasNext() {...}
	@Override
	public Any next() {...}
}

当然,还有一种方式,具体迭代器作为具体类的私有内部类,不用考虑向iterator传值
be like

public class Aggregate implements Iterable<Any> {
	// ...
	private class AggregateIterator implements Iterator<Any> {...}
}

客户端

// 很简单了
Aggregate aggregate = new Aggregate();
Iterator<Any> iterator = aggregate.iterator();
while (iterator.hashNext()) {
	Any any = iterator.next();
	// do something with any
} 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值