1 概述
定义 提供一种方法访问一个容器中的各个元素,而又不需要暴露该对象的内部细节。
迭代器是为容器服务的,迭代器模式现在已经融入到每种语言之中了,java中集合都以实现,基本在使用开发项目中不用我们自定义容器和迭代器了。但还是要了解的。
Iterator 迭代器接口或抽象类,负责定义访问元素和遍历元素的接口。
ConcreteIterator 具体迭代器
aggregate 容器接口
concreteAggregate 具体容器
2 代码示例
创建容器接口和实现类
/**
* @author chiangtaol
* @date 2020-12-07
* @describe 抽象容器
*/
public interface Aggregate<T extends Object> {
/**
* 元素增加
*/
void add(T object);
/**
* 移除元素
*/
void remove(T object);
/**
* 迭代器
*/
Iterator<T> iterator();
}
/**
* @author chiangtaol
* @date 2020-12-07
* @describe 容器实现类
*/
public class AggregateImpl<E> implements Aggregate<E>{
private Vector<E> vector = new Vector();
/**
* 元素增加
*
* @param object
*/
@Override
public void add(E object) {
this.vector.add(object);
}
/**
* 移除元素
*
* @param object
*/
@Override
public void remove(E object) {
this.vector.remove(object);
}
/**
* 迭代器
*/
@Override
public Iterator<E> iterator() {
return new IteratorImpl(this.vector);
}
}
创建迭代器接口和实现类
/**
* @author chiangtaol
* @date 2020-12-07
* @describe 迭代器接口
*/
public interface Iterator<E extends Object> {
E next();
boolean hasNext();
boolean remove();
}
/**
* @author chiangtaol
* @date 2020-12-07
* @describe 迭代器实现类
*/
public class IteratorImpl<E> implements Iterator<E>{
private Vector<E> vector;
public int cursor = 0;
public IteratorImpl(Vector<E> vector){
this.vector = vector;
}
@Override
public E next() {
E result;
if (hasNext()){
result = this.vector.get(this.cursor++);
}else {
result = null;
}
return result;
}
@Override
public boolean hasNext() {
if (this.cursor == vector.size()){
return false;
}else{
return true;
}
}
@Override
public boolean remove() {
this.vector.remove(this.cursor);
return true;
}
}
测试代码
@Test
void iterator() {
Aggregate<String> aggregate = new AggregateImpl<>();
aggregate.add("1");
aggregate.add("3");
aggregate.add("5");
Iterator<String> iterator = aggregate.iterator();
while (iterator.hasNext()){
System.out.println(iterator.next());
}
}
运行结果如下:
1 3 5