当前位置: 首页 > news >正文

设计模式(15):迭代器模式

介绍

  • 提供一中可以遍历聚合对象的方式。又称为: 游标cursor模式

迭代器模式角色

  • 抽象聚合类(Aggregate):提供了聚合相关的方法,并提供获取迭代器的方法;
  • 具体集合类(ConcreteAggregate):实现了抽象聚合类;
  • 抽象迭代器(Iterator):定义了迭代相关的方法;
  • 具体迭代器(ConcreteIterator): 实现了抽象迭代器的方法。

场景:

  • 需要以一种特定的方式遍历聚合对象;
  • 聚合对象:存储数据
  • 迭代器:遍历数据

开发中常见的场景

  • JDK内置的迭代器(List/Set)

代码实现

  • 抽象聚合类
/*** 抽象聚合类*/
public interface Aggregate {/*** 添加对象* @param obj*/void addObject(Object obj);/*** 移除对象* @param obj*/void removeObject(Object obj);/*** 获取迭代器方法* @return*/MyIterator iterator();
}
  • 抽象迭代器
/***	抽象迭代器*/
public interface MyIterator {/*** 当前游标置零*/void first(); /*** 将游标指向下一个元素*/void next();	/*** 是否存在下一个元素* @return*/boolean HasNext();  /*** 判断当前对象是否第一个元素* @return*/boolean isfirst();	/*** 判断当前对象是否最后一个元素* @return*/boolean isLast();		/*** 获取当期游标对象* @return*/Object getCurrentObj();	
}
  • 具体聚合类,内部类方法定义具体迭代器
public class ConcreteAggregate implements Aggregate {private List<Object> list = new ArrayList<Object>();/*** 添加对象* @param obj*/@Overridepublic void addObject(Object obj){list.add(obj);}/*** 移除对象* @param obj*/@Overridepublic void removeObject(Object obj){list.remove(obj);}	/*** 获取迭代器方法* @return*/@Overridepublic MyIterator iterator() {return new ConcreteIterator();} /*** 使用内部类定义迭代器,可以直接使用外部类的属性*/private class ConcreteIterator implements MyIterator{/*** 定义游标---用于记录遍历List容器时的位置*/private int cursor; /*** 当前游标置零*/@Overridepublic void first() {cursor=0;}/*** 获取当期游标对象*/@Overridepublic Object getCurrentObj() {return list.get(cursor);}	/*** 将游标指向下一个元素*/@Overridepublic void next() {if(cursor<list.size()){cursor++;}}/*** 是否存在下一个元素*/@Overridepublic boolean HasNext() {if(cursor<list.size()){return true;}return false;}/*** 判断当前对象是否第一个元素*/@Overridepublic boolean isfirst() {return cursor==0?true:false;}/*** 判断当前对象是否最后一个元素*/@Overridepublic boolean isLast() {return cursor==(list.size()-1)?true:false;}}
}
  • 测试调用
public static void main(String[] args) {Aggregate cma = new ConcreteMyAggregate();cma.addObject("aaa");cma.addObject("bbb");cma.addObject("ccc");MyIterator iterator=cma.iterator();while(iterator.HasNext()){System.out.println(iterator.getCurrentObj());iterator.next();}System.out.println("----------------------------------");cma.removeObject("bbb");MyIterator iter=cma.iterator();while(iter.HasNext()){System.out.println(iter.getCurrentObj());iter.next();}}



更多设计模式学习:

          设计模式(1):介绍
          设计模式(2):单例模式
          设计模式(3):工厂模式
          设计模式(4):建造者模式
          设计模式(5):原型模式
          设计模式(6):桥接模式
          设计模式(7):装饰器模式
          设计模式(8):组合模式
          设计模式(9):外观模式
          设计模式(10):享元模式
          设计模式(11):适配器模式
          设计模式(12):代理模式
          设计模式(13):模板方法模式
          设计模式(14):命令模式
          设计模式持续更新中…

http://www.lryc.cn/news/330587.html

相关文章:

  • 前端内部技术分享---前端组件之表格组件的封装与使用(Vue3)
  • 【一】Mac 本地部署大模型
  • vue实现相机拍摄,可录视频、拍照片、前置后置切换(简单小demo)
  • 【项目】牛马点评 问题汇总
  • 使用 Docker Compose 部署邮件服务器
  • FastAPI+React全栈开发21 探索React路由器和其他好东西
  • Java pdfbox 给 PDF 添加文字和图片水印 并旋转45度
  • 微信小程序中路由跳转方式
  • Flutter应用发布前的关键iOS设备测试策略
  • 深入理解Linux环境配置文件:.bashrc、.bash_profile和.profile
  • 数据库设计规范(三大范式)
  • 图论模板详解
  • ArcGIS Pro打不开Excel?Microsoft驱动程序安装不上?
  • 简单了解裸眼3D呈现技术
  • 单元测试——Junit (断言、常用注解)
  • 【蓝桥杯每日一题】4.2 全球变暖
  • ffmpeg点对点音视频udp协议传输
  • ensp华为AC+AP上线配置
  • JAVA基础02-Java语言基础以及编译准备工作
  • Photoshop 2024 Mac/win---图像处理的新纪元,解锁无限创意
  • 【MySQL系列】使用 ALTER TABLE 语句修改表结构的方法
  • ElementUI 表格横向滚动条时滚动到指定位置
  • 【论文阅读】DETR 论文逐段精读
  • 负载均衡:实现高效稳定的网络服务
  • 2024最新软件测试【测试理论+ 抓包与网络协议】面试题(内附答案)
  • 极简7照训练法,奇趣相机引领儿童AI摄影潮流
  • Flink应用
  • C# 委托与事件 终章
  • MySQL-linux安装-万能RPM法
  • elment UI el-date-picker 月份组件选定后提交后台页面显示正常,提交后台字段变成时区格式