迭代器模式-Iterator
名称:
迭代器模式(Iterator Pattern)-对象行为模式
问题:
The iterator pattern provides a consistent way to sequentially access items in a collection that is independent of and separate from the underlying collection.
-提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的内部表示。
适用性:
-访问一个聚合对象的内容而无需暴露它的内部表示。
-支持对聚合对象的多种遍历。
-为遍历不同的聚合结构提供一个统一的接口。
协作:
ConcreteAggregate跟踪聚合中的当前对象,并能够计算出待遍历的后续对象。
优点和缺点:
1、支持以不同的方式遍历一个聚合。
2、迭代器简化了聚合的接口。
3、在同一个聚合上可以有多个遍历。
解决方案:
1、 模式的参与者
1、Iterator
-迭代器定义访问和遍历元素的接口。
2、ConcreteIterator
-具体迭代器实现迭代器接口。
-对该聚合遍历时跟踪当前位置。
3、Aggregate
-聚合定义创建相应迭代器对象的接口。
4、ConcreteAggregate
-具体聚合实现创建相应迭代器的接口,该操作返回ConcreteIterator的一个适当的实例。
2.实现方式
interface Aggregate { public void add(Object obj); public void remove(Object obj); public Iterator getIterator(); }
class ConcreteAggregate implements Aggregate { private List<Object> list=new ArrayList<Object>(); public void add(Object obj) { list.add(obj); } public void remove(Object obj) { list.remove(obj); } public Iterator getIterator() { return(new ConcreteIterator(list)); } }
interface Iterator { Object first(); Object next(); boolean hasNext(); }
class ConcreteIterator implements Iterator { private List<Object> list=null; private int index=-1; public ConcreteIterator(List<Object> list) { this.list=list; } public boolean hasNext() { if(index<list.size()-1) { return true; } else { return false; } } public Object first() { index=0; Object obj=list.get(index);; return obj; } public Object next() { Object obj=null; if(this.hasNext()) { obj=list.get(++index); } return obj; } }
参考资料
《设计模式:可复用面向对象软件的基础》
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具