论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
应用中心
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com技术社区
»
论坛
›
物联网
›
物联网
›
行为模式3.迭代器模式
行为模式3.迭代器模式
张裕
论坛元老
|
2025-1-5 09:41:40
|
显示全部楼层
|
阅读模式
楼主
主题
1404
|
帖子
1404
|
积分
4212
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
行为型模式
模板方法模式(Template Method Pattern)
下令模式(Command Pattern)
迭代器模式(Iterator Pattern)
观察者模式(Observer Pattern)
中介者模式(Mediator Pattern)
备忘录模式(Memento Pattern)
表明器模式(Interpreter Pattern)
状态模式(State Pattern)
战略模式(Strategy Pattern)
职责链模式(Chain of Responsibility Pattern)
访问者模式(Visitor Pattern)
迭代器模式(Iterator Pattern)
是一种行为型设计模式,它提供一种次序访问聚集对象元素的方式,而不暴露聚集的内部结构。迭代器模式允许客户端按次序访问聚集中的元素,而无需直接访问聚集本身。通常,当你有一个聚集(如列表、队列、栈等),你盼望对聚集中的元素进行迭代,但又不想暴露其内部结构时,可以使用迭代器模式。
迭代器模式的主要组成部分
Iterator(迭代器)
:迭代器接口,界说了遍历聚集元素的方法,如 hasNext() 和 next()。
ConcreteIterator(具体迭代器)
:实现了Iterator接口,并界说了怎样遍历具体聚集中的元素。
Aggregate(聚合类,也叫聚集类)
:聚集接口,提供创建迭代器对象的方法。
ConcreteAggregate(具体聚合类)
:实现了Aggregate接口,界说了怎样存储和获取聚集元素。
迭代器模式的工作流程
创建迭代器
:客户端通过聚合类获取迭代器实例。
遍历聚集
:客户端通过迭代器的方法遍历聚集中的元素,使用 hasNext() 判定是否有下一个元素,使用 next() 获取当前元素。
不暴露聚集的内部实现
:迭代器模式让客户端可以或许通过标准的接口访问聚集元素,而不需要知道聚集的内部结构。
迭代器模式的长处
封装性
:聚集的实现细节对客户端是隐蔽的,客户端不需要关心聚集怎样存储数据。
灵活性
:可以对不同的聚集范例使用雷同的迭代方式。
单一职责
:聚合类负责存储数据,迭代器类负责遍历数据,这样做可以避免聚集类本身过于复杂。
Java 示例代码
import java.util.ArrayList;
import java.util.List;
// 1. 定义Iterator接口
interface Iterator {
boolean hasNext(); // 判断是否有下一个元素
Object next(); // 获取下一个元素
}
// 2. 定义Aggregate接口(集合接口)
interface Aggregate {
Iterator createIterator(); // 创建一个迭代器
}
// 3. ConcreteIterator(具体迭代器)实现Iterator接口
class ConcreteIterator implements Iterator {
private List<Object> items;
private int position = 0;
public ConcreteIterator(List<Object> items) {
this.items = items;
}
@Override
public boolean hasNext() {
return position < items.size();
}
@Override
public Object next() {
if (this.hasNext()) {
return items.get(position++);
}
return null;
}
}
// 4. ConcreteAggregate(具体集合类)实现Aggregate接口
class ConcreteAggregate implements Aggregate {
private List<Object> items = new ArrayList<>();
public void addItem(Object item) {
items.add(item);
}
@Override
public Iterator createIterator() {
return new ConcreteIterator(items);
}
}
// 5. 客户端使用迭代器遍历集合
public class IteratorPatternDemo {
public static void main(String[] args) {
// 创建一个具体的集合
ConcreteAggregate aggregate = new ConcreteAggregate();
aggregate.addItem("Item 1");
aggregate.addItem("Item 2");
aggregate.addItem("Item 3");
aggregate.addItem("Item 4");
// 创建迭代器
Iterator iterator = aggregate.createIterator();
// 使用迭代器遍历集合
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}
}
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
张裕
论坛元老
这个人很懒什么都没写!
楼主热帖
AI绘画Stable Diffusion Lora模子的利 ...
什么时候用C而不消C++?
049-WEB攻防-文件上传&存储安全&OSS对 ...
Linux安装最新版Docker完整教程(建议 ...
这所985超燃,中科院院士10天发四篇Nat ...
在 Kubernetes 中部署 Alertmanager ...
京准电钟:GPS北斗卫星时钟同步系统行 ...
【数据结构初阶】单链表经典算法题十道 ...
高性能序列化:Protobuf与Avro
FPGA开发——IP核的RAM调用(单端口) ...
标签云
集成商
AI
运维
CIO
存储
服务器
浏览过的版块
Oracle
前端开发
数据仓库与分析
程序人生
登录参与点评抽奖加入IT实名职场社区
下次自动登录
忘记密码?点此找回!
登陆
新用户注册
用其它账号登录:
关闭
快速回复
返回顶部
返回列表