提供一种方法顺序访问一个容器对象中的各个元素,而又不需要暴露该对象的内部表示。
public class Employee {
public String name;
public int age;
public Employee(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Employee [name=" + name + ", age=" + age + "]";
}
}
/**
* 迭代器接口
*/
public interface Iterator {
boolean hasNext();
Object next();
}
/**
* 遍历员工的迭代器
*/
public class EmployeeIterator implements Iterator {
private ArrayList<Employee> list;
private int position = 0;
public EmployeeIterator(ArrayList<Employee> list) {
this.list = list;
}
@Override
public boolean hasNext() {
return position + 1 > list.size() ? false : true;
}
@Override
public Object next() {
return list.get(position++);
}
}
/**
* 要遍历的数据
*/
class Data{
private ArrayList<Employee> employees = new ArrayList<Employee>();
public Data() {
employees.add(new Employee("1111", 12));
employees.add(new Employee("2222", 123));
employees.add(new Employee("3333", 127));
}
public Iterator iterator(){
return new EmployeeIterator(employees);
}
}
测试代码
Data data = new Data();
Iterator iterator = data.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
迭代器模式发展至今,几乎所有的高级语言都有相应的内置实现,对于开发者而言,已经极少会自己去实现迭代器了,所以本章内容更多的是了解而非应用。 1.优点 (1)符合面向对象设计原则中的单一职责原则。 (2)支持对容器对象的多种遍历。弱化了容器类与遍历算法之间的关系。 2.缺点 (1)类文件的增加。 (3)会出现ConcurrentModificationException异常。 (2)遍历过程是一个单向且不可逆的遍历。