一、基本介绍
- 英文名:Iterator
- 概念:它提供一种方法访问一个容器对象中各个元素,而又不需暴露该对象的内部细节
- 模式类型:结构型
- 主要特点:提供了遍历容器的方便性,容器只要管理增减元素就可以了,需要遍历时交由迭代器进行
二、实现
1、模式
-
Iterator抽象迭代器:负责定义访问和遍历元素的接口,而且基本上是有固定的3个方法:first()获
得第一个元素,next()访问下一个元素,hasNext()是否已经访问到底部
-
ConcreteIterator具体迭代器:具体迭代器角色要实现迭代器接口,完成容器元素的遍历
-
Aggregate抽象容器:负责提供创建具体迭代器角色的接口,必然提供一个类似createIterator()这样的
方法,在Java中一般是iterator()方法
-
Concrete Aggregate具体容器:具体容器实现容器接口定义的方法,创建出容纳迭代器的对象
Ⅰ、代码
抽象迭代器
public interface Iterator {
//遍历到下一个元素
public Object next();
//是否已经遍历到尾部
public boolean hasNext();
//删除当前指向的元素
public boolean remove();
}
具体迭代器
public class ConcreteIterator implements Iterator {
private Vector vector = new Vector();
//定义当前游标
public int cursor = 0;
@SuppressWarnings("unchecked")
public ConcreteIterator(Vector _vector) {
this.vector = _vector;
}
//判断是否到达尾部
public boolean hasNext() {
if (this.cursor >= this.vector.size() || this.vector.get(this.cursor) ==null) {
return false;
} else {
return true;
}
}
//返回下一个元素
public Object next() {
// 同一对象的成员变量数据(先赋值后++)
return this.vector.get(this.cursor++);
}
//删除当前元素
public boolean remove() {
return this.vector.remove(this.cursor);
}
}
抽象容器
public interface Aggregate {
//是容器必然有元素的增加
public void add(Object object);
//减少元素
public void remove(Object object);
//由迭代器来遍历所有的元素
public Iterator iterator();
}
具体容器
public class ConcreteAggregate implements Aggregate {
// 容纳对象的容器
private Vector vector = new Vector();
// 增加一个元素
public void add(Object object) {
this.vector.add(object);
}
// 返回迭代器对象
public Iterator iterator() {
return new ConcreteIterator(this.vector);
}
// 删除一个元素
public void remove(Object object) {
this.vector.remove(object);
}
}
场景类
public static void main(String[] args) {
//声明出容器
Aggregate agg = new ConcreteAggregate();
//产生对象数据放进去
agg.add("abc");
agg.add("aaa");
agg.add("1234");
//遍历一下
Iterator iterator = agg.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}
Ⅱ、注意事项
- 开发系统时,迭代器的删除方法应该完成两个逻辑:一是删除当前元素,二是当前游标指向下一个元素
三、使用场景
- 尽量不要自己写迭代器模式!使用Java提供的Iterator一般就能满足你的要求了