迭代器模式-Iterator Pattern

基本概念

迭代器模式,提供一种方法以便顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。迭代器为遍历聚集结构提供了如开始、下一个、是否结束、当前项等统一接口。

结构图


上图摘自《大话设计模式》

应用场景

当需要访问一个聚合对象,而且不管这些对象是什么,都需要遍历的时候,应该考虑迭代器模式。

源码示例

1.定义一个迭代器接口

package com.spook.iterator;

/**
 * 迭代器接口
 */
public interface Iterator {
	public Object first();

	public Object next();

	public Object currentItem();

	public boolean hasNext();

	public boolean isDone();

}
2.定义一个抽象聚集接口

package com.spook.iterator;

/**
 * 抽象聚集接口
 */
public interface Aggregate {
	public Iterator getIterator();
}
3.定义一个迭代器的实现类

package com.spook.iterator;

/**
 * 迭代器的实现类
 */
public class ConcreteIterator implements Iterator {

	public String cityNames[] = { "NewYork", "London", "Tokyo", "Hongkong" };
	int index = 0;

	@Override
	public Object first() {
		// TODO Auto-generated method stub
		if (cityNames.length > 0) {
			return cityNames[0];
		} else {
			return null;
		}
	}

	@Override
	public Object next() {
		// TODO Auto-generated method stub
		if (this.hasNext()) {
			return cityNames[index++];
		} else {
			return null;
		}
	}

	@Override
	public Object currentItem() {
		// TODO Auto-generated method stub
		if (index < cityNames.length) {
			return cityNames[index];
		} else {
			return null;
		}
	}

	@Override
	public boolean isDone() {
		// TODO Auto-generated method stub
		if (index >= cityNames.length) {
			return true;
		} else {
			return false;
		}
	}

	@Override
	public boolean hasNext() {
		// TODO Auto-generated method stub
		if (index < cityNames.length) {
			return true;
		} else {
			return false;
		}
	}
}
4.聚集的实现类

package com.spook.iterator;

/**
 * 聚集的实现类
 */
public class ConcreteAggregate implements Aggregate {

	@Override
	public Iterator getIterator() {
		// TODO Auto-generated method stub
		return new ConcreteIterator();
	}

}
5.测试类
package com.spook.iterator;

/**
 * 测试类
 */
public class Test {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ConcreteAggregate concreteAggregate = new ConcreteAggregate();
		Iterator iterator = concreteAggregate.getIterator();

		System.out.println("第一个元素:" + iterator.first());
		System.out.println("---------------------");
		while (iterator.hasNext()) {
			System.out.println(iterator.next());
			System.out.println("是否完成遍历:" + iterator.isDone());
		}

	}

}
运行测试类输出如下内容:

第一个元素:NewYork
---------------------
NewYork
是否完成遍历:false
London
是否完成遍历:false
Tokyo
是否完成遍历:false
Hongkong
是否完成遍历:true



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值