迭代器模式简介
- 迭代第模式(iterator pattern)是提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部的设计模式。
结构
- 1.抽象聚合角色(Aggregate):定义存储、添加、删除聚合元素以及创建迭代器对象的接口。
- 2.具体聚合角色(concrete Aggregate):实现抽象聚合类,返回一个具体迭代器的实例。
- 3.抽象迭代器角色(Iterator):定义访问和遍历聚合元素的接口,通常包含hasNext()、next()等方法
- 4.具体迭代器角色(Concrete Iterator):实现抽象迭代器接口中所定义的方法,完成对聚合对象的遍历,记录遍历的当前位置。
UML图

具体实现
例子:实现一个Student的迭代器。
UML图

代码实现
- Student实体类
package com.xxliao.pattern.behavioral.iterator.demo;
/**
* @author xxliao
* @description: Student 实体
* @date 2024/5/26 12:03
*/
public class Student {
private String name;
private String sex;
private String idCard;
public Student(String name, String sex, String idCard) {
this.name = name;
this.sex = sex;
this.idCard = idCard;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getIdCard() {
return idCard;
}
public void setIdCard(String idCard) {
this.idCard = idCard;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", sex='" + sex + '\'' +
", idCard='" + idCard + '\'' +
'}';
}
}
- 抽象聚合角色
package com.xxliao.pattern.behavioral.iterator.demo;
/**
* @author xxliao
* @description: 定义抽象容器类,包括添加元素、删除元素、获取迭代器对象等方法
* @date 2024/5/26 12:09
*/
public interface StudentAggregate {
void addStudent(Student student);
void removeStudent(Student student);
StudentIterator getStudentIterator();
}
- 具体聚合角色
package com.xxliao.pattern.behavioral.iterator.demo;
import java.util.ArrayList;
import java.util.List;
/**
* @author xxliao
* @description: 定义具体容器类,重写所有的方法。
* @date 2024/5/26 12:11
*/
public class StudentAggregateImpl implements StudentAggregate{
// 学生列表容器
private List<Student> list = new ArrayList<Student>();
@Override
public void addStudent(Student student) {
this.list.add(student);
}
@Override
public void removeStudent(Student student) {
this.list.remove(student);
}
@Override
public StudentIterator getStudentIterator() {
return new StudentIteratorImpl(this.list);
}
}
- 抽象迭代器角色
package com.xxliao.pattern.behavioral.iterator.demo;
/**
* @author xxliao
* @description: 抽象迭代器接口,申明hashNext/next方法
* @date 2024/5/26 12:02
*/
public interface StudentIterator {
boolean hasNext();
Student next();
}
- 具体迭代器角色
package com.xxliao.pattern.behavioral.iterator.demo;
/**
* @author xxliao
* @description: 抽象迭代器接口,申明hashNext/next方法
* @date 2024/5/26 12:02
*/
public interface StudentIterator {
boolean hasNext();
Student next();
}
- 测试客户端
package com.xxliao.pattern.behavioral.iterator.demo;
/**
* @author xxliao
* @description: 迭代器模式 测试客户端
* @date 2024/5/26 12:14
*/
public class Client {
public static void main(String[] args) {
// 创建具体容器类
StudentAggregateImpl studentAggregate = new StudentAggregateImpl();
// 向容器中添加元素
studentAggregate.addStudent(new Student("tom","男","01"));
studentAggregate.addStudent(new Student("luxy","女","02"));
studentAggregate.addStudent(new Student("leo","男","03"));
// 获取迭代器
StudentIterator studentIterator = studentAggregate.getStudentIterator();
// 遍历
while(studentIterator.hasNext()) {
System.out.println(studentIterator.next());
}
}
}
- 测试结果

1139

被折叠的 条评论
为什么被折叠?



