定义:提供一种方法,顺序访问一个集合对象中的各个元素,而又不暴露该对象的内部表示。

类型:行为型

适用场景:

访问一个集合对象的内容而无需暴露它的内部表示

为遍历不同的集合结构提供一个统一的接口

优点:

分离了集合对象的遍历行为

缺点:

类的个数成对增加

  1. public class Course {
  2. private String name;
  3. public Course(String name){
  4. this.name=name;
  5. }
  6. public String getName(){
  7. return name;
  8. }
  9. }

 

  1. public interface CourseAggregate {
  2. void addCourse(Course course);
  3. void removeCourse(Course course);
  4. CourseIterator getCourseIterator();
  5. }

  

  1. public class CourseAggregateImpl implements CourseAggregate{
  2. private List courseList;
  3. public CourseAggregateImpl(){
  4. this.courseList=new ArrayList();
  5. }
  6. @Override
  7. public void addCourse(Course course) {
  8. courseList.add(course);
  9. }
  10.  
  11. @Override
  12. public void removeCourse(Course course) {
  13. courseList.remove(course);
  14. }
  15.  
  16. @Override
  17. public CourseIterator getCourseIterator() {
  18. return new CourseIteratorImpl(courseList);
  19. }
  20. }

  

  1. public interface CourseIterator {
  2. Course nextCourse();
  3. boolean isLastCourse();
  4. }

  

  1. public class CourseIteratorImpl implements CourseIterator {
  2. private List courseList;
  3. private int position;
  4. private Course course;
  5.  
  6. public CourseIteratorImpl(List courseList) {
  7. this.courseList = courseList;
  8. }
  9.  
  10. @Override
  11. public Course nextCourse() {
  12. System.out.println("返回课程,位置是: "+position);
  13. course=(Course)courseList.get(position);
  14. position++;
  15. return course;
  16. }
  17.  
  18. @Override
  19. public boolean isLastCourse() {
  20. if(position<courseList.size()){
  21. return false;
  22. }
  23. return true;
  24. }
  25. }

  

  1. public class Test {
  2. public static void main(String[] args) {
  3. Course course1 = new Course("Java电商一期");
  4. Course course2 = new Course("Java电商二期");
  5. Course course3 = new Course("Java设计模式精讲");
  6. Course course4 = new Course("Python课程");
  7. Course course5 = new Course("算法课程");
  8. Course course6 = new Course("前端课程");
  9.  
  10. CourseAggregate courseAggregate = new CourseAggregateImpl();
  11.  
  12. courseAggregate.addCourse(course1);
  13. courseAggregate.addCourse(course2);
  14. courseAggregate.addCourse(course3);
  15. courseAggregate.addCourse(course4);
  16. courseAggregate.addCourse(course5);
  17. courseAggregate.addCourse(course6);
  18.  
  19. System.out.println("-----课程列表-----");
  20. printCourses(courseAggregate);
  21.  
  22. courseAggregate.removeCourse(course4);
  23. courseAggregate.removeCourse(course5);
  24.  
  25. System.out.println("-----删除操作之后的课程列表-----");
  26. printCourses(courseAggregate);
  27. }
  28. public static void printCourses(CourseAggregate courseAggregate){
  29. CourseIterator courseIterator=courseAggregate.getCourseIterator();
  30. while(!courseIterator.isLastCourse()){
  31. Course course=courseIterator.nextCourse();
  32. System.out.println(course.getName());
  33. }
  34. }
  35. }

  

 

Java设计模式迭代器的更多相关文章

  1. JAVA 设计模式 迭代器模式

    用途 迭代器模式 (Iterator) 提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示. 迭代器模式是一种行为型模式. 结构

  2. java设计模式——迭代器模式

    一. 定义与类型 定义:提供一种方法,顺序访问一个集合对象中的各个元素,而又不暴露该对象的内部表示 类型:行为型. 二. 使用场景 (1) 访问一个集合对象的内容而无需暴露它的内部表示 (2)  为遍 ...

  3. Java设计模式の迭代器模式

    迭代器模式定义 迭代器模式(Iterator),提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示. 迭代器模式的角色构成 (1)迭代器角色(Iterator):定义遍历元素所需 ...

  4. JAVA设计模式---迭代器模式

    1.定义: 提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示. 2.实例:1)需求: 菜单(煎饼屋菜单.餐厅菜单和咖啡菜单)采用不同的集合存取(ArrayList,String[] ...

  5. java设计模式----迭代器模式和组合模式

    迭代器模式: 提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示. 设计原则: 单一责任:一个类应该只有一个引起变化的原因 组合模式: 允许你将对象组合成树形结构来表现“整体/部分” ...

  6. 折腾Java设计模式之迭代器模式

    迭代器模式 Provide a way to access the elements of an aggregate object sequentially without exposing its ...

  7. Java设计模式学习记录-迭代器模式

    前言 这次要介绍的是迭代器模式,也是一种行为模式.我现在觉得写博客有点应付了,前阵子一天一篇,感觉这样其实有点没理解透彻就写下来了,而且写完后自己也没有多看几遍,上次在面试的时候被问到java中的I/ ...

  8. Java 设计模式系列(十五)迭代器模式(Iterator)

    Java 设计模式系列(十五)迭代器模式(Iterator) 迭代器模式又叫游标(Cursor)模式,是对象的行为模式.迭代子模式可以顺序地访问一个聚集中的元素而不必暴露聚集的内部表象(interna ...

  9. 重学 Java 设计模式:实战迭代器模式「模拟公司组织架构树结构关系,深度迭代遍历人员信息输出场景」

    作者:小傅哥 博客:https://bugstack.cn - 原创系列专题文章 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 相信相信的力量! 从懵懂的少年,到拿起键盘,可以写一个Hell ...

随机推荐

  1. mysql-笔记-数据类型

    https://dev.mysql.com/doc/refman/5.7/en/numeric-type-overview.html serial: SERIAL is an alias for BI ...

  2. Promise学习笔记

    Promise对象 Promise 表示一个异步操作的最终结果,与之进行交互的方式主要是 then 方法,该方法注册了两个回调函数,用于接收 promise 的终值或本 promise 不能执行的原因 ...

  3. Scrapy 框架,持久化文件相关

    持久化相关 相关文件 items.py 数据结构模板文件.定义数据属性. pipelines.py 管道文件.接收数据(items),进行持久化操作. 持久化流程 1.爬虫文件爬取到数据后,需要将数据 ...

  4. 天气预测(CNN)

    import torch import torch.nn as nn import torch.utils.data as Data import numpy as np import pymysql ...

  5. 05VueCli

    详情请见: https://pizzali.github.io/2018/10/30/VueCli/ Vue CLI 是一个基于 Vue.js 进行快速开发的完整系统,Vue CLI 致力于将 Vue ...

  6. Battery Historian 使用常用命令

    一.重置电池数据收集数据 打开电池数据获取:adb shell dumpsys batterystats --enable full-wake-history 重置电池数据: adb shell du ...

  7. linux 触摸屏驱动

    目录 linux 触摸屏驱动 输入子系统怎么写? 触摸屏事件 事件分类 事件设置 硬件配置 设计思路 完整程序 测试 ts_lib 使用 问题小结 title: linux 触摸屏驱动 tags: l ...

  8. 更改Jenkins的workspace目录

    系统管理→系统设置→主目录(的右边问号下面)→高级(是不是忽略了啊\(^o^)/~)→工作空间根目录 点开后面的问号可以看见3个参数(配置路径需要的): ${JENKINS_HOME} — Jenki ...

  9. [物理学与PDEs]第3章习题5 一维理想磁流体力学方程组的数学结构

    试将一维理想磁流体力学方程组 (5. 10)-(5. 16) 化为一阶拟线性对称双曲组的形式. 解答: 由 (5. 12),(5. 16) 知 $$\beex \bea 0&=\cfrac{\ ...

  10. MySQL学习6 - 完整性约束

    一 介绍 二 not null 与default 三 unique 四 primary key 五 auto_increment 六 foreign key 快速理解foreign key 创建两张表 ...