广州正规网站制作公司,网页和移动端界面设计,网站建设是属于虚拟产品吗,wordpress双按钮设置定义
提供一个对象来顺序访问聚合对象中的一系列数据#xff0c;而不暴露聚合对象的内部表示。
结构
迭代器模式主要包含以下角色#xff1a;
抽象聚合角色#xff1a;定义存储、添加、删除聚合元素以及创建迭代器对象的接口。具体聚合角色#xff1a;实现抽象聚合类而不暴露聚合对象的内部表示。
结构
迭代器模式主要包含以下角色
抽象聚合角色定义存储、添加、删除聚合元素以及创建迭代器对象的接口。具体聚合角色实现抽象聚合类返回一个具体迭代器的实例。抽象迭代器角色定义访问和遍历聚合元素的接口通常包含 hasNext()、next() 等方法。具体迭代器角色实现抽象迭代器接口中所定义的方法完成对聚合对象的遍历记录遍历的当前位置。
案例 抽象聚合类 public interface StudentAggregate {//添加元素void addStudent(Student student);//删除元素void deleteStudent(Student student);//创建迭代器对象ConcreteIterator getIterator();
} 具体聚合类 public class ConcreteAggregate implements StudentAggregate{private ListStudent list new ArrayList();Overridepublic void addStudent(Student student) {list.add(student);}Overridepublic void deleteStudent(Student student) {list.remove(student);}Overridepublic ConcreteIterator getIterator() {return new ConcreteIterator(list);}
} 抽象迭代器 public interface StudentIterator {boolean hasNext();Student next();
} 具体迭代器类 public class ConcreteIterator implements StudentIterator {private ListStudent list new ArrayList();private int index 0;public ConcreteIterator(ListStudent list) {this.list list;}Overridepublic boolean hasNext() {return index list.size();}Overridepublic Student next() {Student student list.get(index);index;return student;}
} 载体 public class Student {private String name;private String Id;public Student(String name, String id) {this.name name;Id id;}Overridepublic String toString() {return Student{ name name \ , Id Id \ };}
} 测试 public class Client {public static void main(String[] args) {ConcreteAggregate concreteAggregate new ConcreteAggregate();concreteAggregate.addStudent(new Student(张三,NO1));concreteAggregate.addStudent(new Student(李四,NO2));concreteAggregate.addStudent(new Student(王五,NO3));ConcreteIterator iterator concreteAggregate.getIterator();while(iterator.hasNext()){Student currentStudent iterator.next();System.out.println(currentStudent.toString());}}
} Student{name张三, IdNO1} Student{name李四, IdNO2} Student{name王五, IdNO3} JDK源码解析
JDK中的Iterator实现 查看ArrayList源码由上图可以看出ArrayList内存在一个内部类Itr实现了抽象迭代接口重写了hasNext与next方法。而ArrayList提供了iterator方法返回Iterator对象。