迭代器模式

简介: 迭代器模式

iterator模式



需求:给大家举个例子,现在假设,有一个教室类,里面包含了一堆学生,我现在要遍历教室里的学生,怎么来玩儿

public interface Aggregate {
    public abstract Iterator iterator(); 
}
public interface Iterator {
    public abstract boolean hasNext();
    public abstract Object next();
}
public class Student {
    private String name;
    public Student (String name) {
        this.name = name;
    }
    public String getName() {
        return name;
    }
}
public class Classroom implements Aggregate {
    private Student[] students;
    private int last = 0;
    public Classroom(int size) {
        this.students = new Student[size];
    }
    public Student getStudents(int size) {
        return students[size];
    }
    public void addStudent(Student student) {
        this.students[last] = student;
        last++;
    }
    public int getLength() {
        return last;
    }
    @Override
    public Iterator iterator() {
        return new ClassroomIterator(this);
    }
}
public class ClassroomIterator implements Iterator {
    private Classroom classroom;
    private int index;
    public ClassroomIterator(Classroom classroom) {
        this.classroom = classroom;
        this.index = 0;
    }
    @Override
    public boolean hasNext() {
        if (index < classroom.getLength()) {
            return true;
        } else {
            return false;
        }
    }
    @Override
    public Object next() {
        Student student=classroom.getStudents(index);
        index++;
        return student;
    }
}
public class Main {
    public static void main(String[] args) {
        Classroom classroom = new Classroom(2);
        classroom.addStudent(new Student("小李"));
        classroom.addStudent(new Student("王三"));
        Iterator iterator = classroom.iterator();
        while (iterator.hasNext()){
            System.out.println(((Student)iterator.next()).getName());
        }
    }
}


面向Iterator接口编程,无论底层的数据结构和迭代算法如何变化,调用者都不用修改代码


高内聚,低耦合,漂亮


其实一般很少自己写这个iterator模式的,一般都是在集合编程中使用,尤其是如果要对集合元素遍历过程中做插入删除操作,那就用iterator,体验JDK已经封装好的iterator模式,加深印象,如果要对某个类中的集合进行遍历,由那个集合类返回一个iterator回来,我们统一面向iterator迭代器接口来编程遍历,提高系统整体的可维护性,可扩展性

如果自己写iterator模式,一般是研发底层的框架,比如提供某个数据给外部遍历,那么可以使用iterator模式自己封装迭代器,以后阶段如果有机会,我们也会去实践


相关文章
|
9月前
|
编译器 程序员 数据安全/隐私保护
C++类和对象(上)
C++类和对象
68 0
|
9月前
|
存储 编译器 C语言
C++:类和对象(上)
C++:类和对象(上)
95 0
|
9月前
|
存储 编译器 C语言
C++-类和对象(1)
C++-类和对象(1)
51 0
|
编译器 C++
C++:类和对象(下)---对类和对象深入一些的理解
C++:类和对象(下)---对类和对象深入一些的理解
|
编译器 C语言 C++
【C++】类和对象(中)(一)
【C++】类和对象(中)(一)
【C++】类和对象(中)(一)
|
6月前
|
存储 安全 编译器
【C++】类和对象(下)
【C++】类和对象(下)
【C++】类和对象(下)
|
9月前
|
存储 编译器 C语言
【C++】类和对象(上)
【C++】类和对象(上)
|
9月前
|
Java C++ Python
【c++】理解类和对象
【c++】理解类和对象
【c++】理解类和对象
|
存储 编译器 C语言
【类和对象(上)】(二)
【类和对象(上)】(二)
46 0