迭代器模式
定义
提供一个对象来顺序访问聚合对象中的所有数据,不暴露聚合对象的内部表示
架构
抽象聚合:定义操作【存储、添加、删除】聚合对象以及创建迭代器对象
具体聚合:返回一个具体的迭代器;
抽象迭代器:定义访问和遍历聚合元素的接口,通常包含hasNext()、first()、next() 等方法;
具体迭代器:完成对聚合对象的遍历,记录遍历的当前位置
应用场景
1、对一组元素提供多种遍历方式
2、遍历不同组提供的一个统一接口
3、访问一组元素中的一个对象的内容而无需暴露内部细节
代码
Aggregate(抽象聚合)
/**
* 抽象聚合
* */
public interface Aggregate {
void add(Object o);
void remove(Object o);
Iterator getIterator();
}
ConcreteAggregate(具体聚合)
/**
*
* Description:
* 具体聚合
* @author: mushi
* @Date: 2021/2/22 14:47
*/
public class ConcreteAggregate implements Aggregate{
//链表可以换成自定义的
private List list = new ArrayList();
@Override
public void add(Object o) {
list.add(o);
}
@Override
public void remove(Object o) {
list.remove(o);
}
@Override
public Iterator getIterator() {
return new ConcreteIterator(list);
}
}
ConcreteIterator(具体迭代器)
/**
*
* Description:
* 具体迭代器
* @author: mushi
* @Date: 2021/2/22 14:49
*/
public class ConcreteIterator implements Iterator {
private List list = null;
private int index = -1;
public ConcreteIterator(List list) {
this.list = list;
}
@Override
public Object first() {
this.index = 0;
return list.get(index);
}
@Override
public Object next() {
Object o = null;
if (this.hasnext()){
o = list.get(++index);
}
return o;
}
@Override
public Object last() {
index = list.size()-1;
return list.get(index);
}
@Override
public boolean hasnext() {
if (index<list.size()-1){
return true;
}else {
return false;
}
}
}
Iterator(抽象迭代器)
/**
* 抽象迭代器
* */
public interface Iterator {
Object first();
Object next();
Object last();
boolean hasnext();
}
Test
public class Test {
public static void main(String[] args) {
//创建一个对象聚合,并往聚合中添加数据
String s1 = "1";
String s2 = "2";
String s3 = "3";
Aggregate aggregate = new ConcreteAggregate();
aggregate.add(s1);
aggregate.add(s2);
aggregate.add(s3);
//获取聚合的迭代器,通过迭代器访问聚合内的数据
Iterator iterator = aggregate.getIterator();
System.out.println(iterator.first());
System.out.println(iterator.next());
System.out.println(iterator.last());
System.out.println(iterator.hasnext());
}
}
总结
其实有jdk自带的iterator()迭代器基本就够了,,无非就是封装一个操作容器的工具类,可以通过这个工具类来操作容器内的元素。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南