什么是迭代器模式
迭代器可以顺序地访问一个聚集中的元素而不必暴露聚集的内部表象(聚集对象是能够包容一组对象的容器对象)
通过创建聚集容器存储对象,在使用迭代器循环调用容器中的聚集对象,调用时隐藏了内部实现过程
示例图
图片.png示例代码
1.创建Iterator迭代器类
public interface Iterator {
//获取下一个元素
Object next();
//判断容器中是否还有下一个元素
boolean hasNext();
}
2.创建ConcreteIterator迭代器实现类
public class ConcreteIterator implements Iterator {
List list = new ArrayList<>();
private int index = 0 ;
public ConcreteIterator(List list) {
this.list = list;
}
@Override
public Object next() {
Object object = null;
if(this.hasNext()){
object = list.get(index++);
}
return object;
}
@Override
public boolean hasNext() {
if(index==list.size()){
return false;
}
return true;
}
}
3.创建Aggregate聚集容器
public interface Aggregate {
//添加对象
public void add(Object obj);
//移除对象
public void remove(Object obj);
//获取对象
public Iterator getIterator();
}
4.创建ConcreteAggreate聚集容器实现类
public class ConcreteAggreate implements Aggregate {
private List list = new ArrayList();
@Override
public void add(Object obj) {
list.add(obj);
}
@Override
public void remove(Object obj) {
list.remove(obj);
}
@Override
public Iterator getIterator() {
return new ConcreteIterator(list);
}
}
5.创建启动类
public class Test {
public static void main(String[] args) {
//创建聚集对象ConcreteAggreate
ConcreteAggreate concreteAggreate = new ConcreteAggreate();
//将不同类型的数据添加到聚集对象
concreteAggreate.add(new Number[1]);
concreteAggreate.add(new Date());
concreteAggreate.add("字符串元素");
concreteAggreate.add(123456);
//获取迭代器对象
Iterator iterator = concreteAggreate.getIterator();
//按照顺序遍历数据
while (iterator.hasNext()){
Object obj = iterator.next();
System.out.println(obj);
}
}
}
6.运行结果
图片.png
网友评论