迭代器模式
迭代器模式,又称为游标模式,它提供一种顺序访问集合/容器 对象元素的方法,而又无需暴漏集合内部表示。迭代器模式可以为不同的容器提供一致的遍历行为,而不用关心容器内容元素组成结构,属于行为型模式。
角色:
抽象迭代器Iterator:负责定义访问和遍历元素的接口
具体迭代器ConcreteIterator:提供具体的元素遍历行为
抽象容器Aggregate:负责定义提供具体迭代器的接口
具体容器ConcreteAggregate:创建具体迭代器
源码的集合是经典的迭代器示例,实际开发中较少使用。
举例
- 类图
- 代码
容器内元素
package com.caozz.demo2.iterator.course;
public class Course {
private String name;
public Course(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
迭代器抽象
package com.caozz.demo2.iterator.course;
public interface Iterator<E> {
E next();
boolean hasNext();
}
迭代器实现:
package com.caozz.demo2.iterator.course;
import java.util.List;
public class IteratorImpl<E> implements Iterator<E> {
private List<E> list;
private int cursor;
private E element;
public IteratorImpl(List<E> list) {
this.list = list;
}
public E next() {
System.out.print("当前位置 " + cursor + " : ");
element = list.get(cursor);
cursor ++;
return element;
}
public boolean hasNext() {
if(cursor > list.size() - 1){
return false;
}
return true;
}
}
容器抽象
package com.caozz.demo2.iterator.course;
public interface ICourseAggregate {
void add(Course course);
void remove(Course course);
Iterator<Course> iterator();
}
容器实现
package com.caozz.demo2.iterator.course;
import java.util.ArrayList;
import java.util.List;
public class CourseAggregateImpl implements ICourseAggregate {
private List courseList;
public CourseAggregateImpl() {
this.courseList = new ArrayList();
}
public void add(Course course) {
courseList.add(course);
}
public void remove(Course course) {
courseList.remove(course);
}
public Iterator<Course> iterator() {
return new IteratorImpl<Course>(courseList);
}
}
测试
package com.caozz.demo2.iterator.course;
public class Test {
public static void main(String[] args) {
Course java = new Course("Java架构");
Course javaBase = new Course("Java基础");
Course design = new Course("设计模式");
Course ai = new Course("人工智能");
ICourseAggregate aggregate = new CourseAggregateImpl();
aggregate.add(java);
aggregate.add(javaBase);
aggregate.add(design);
aggregate.add(ai);
System.out.println("===========课程列表==========");
printCourse(aggregate);
aggregate.remove(ai);
System.out.println("===========删除操作之后的课程列表==========");
printCourse(aggregate);
}
private static void printCourse(ICourseAggregate aggregate) {
Iterator<Course> i = aggregate.iterator();
while (i.hasNext()){
Course course = i.next();
System.out.println("《" + course.getName() + "》");
}
}
}
测试结果
D:\software\java\jdk-17.0.2\bin\java.exe "-javaagent:D:\software\JetBrains\IntelliJ IDEA
===========课程列表==========
当前位置 0 : 《Java架构》
当前位置 1 : 《Java基础》
当前位置 2 : 《设计模式》
当前位置 3 : 《人工智能》
===========删除操作之后的课程列表==========
当前位置 0 : 《Java架构》
当前位置 1 : 《Java基础》
当前位置 2 : 《设计模式》
Process finished with exit code 0