迭代器模式

简介: 迭代器模式

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模式自己封装迭代器,以后阶段如果有机会,我们也会去实践


相关文章
|
1月前
|
设计模式 编译器 C#
访问者模式
访问者模式是一种行为型设计模式,用于将数据结构与其操作解耦。通过在不改变数据结构的前提下增加新的操作,访问者模式提供了一种灵活的方式来实现功能扩展。其关键特性包括分离操作、支持扩展和双分派机制。适用于需要对对象结构中的元素执行多种操作、频繁扩展操作以及不希望操作逻辑和数据结构耦合的场景。常见的使用案例包括编译器中的语法树、文件系统和游戏场景。优点是增加操作时无需修改数据结构,符合开闭原则;缺点是添加新的数据结构类型时需要修改所有访问者类,维护成本较高。
48 3
|
8月前
|
设计模式 uml C++
行为型 迭代器模式
行为型 迭代器模式
49 0
|
设计模式 存储 Java
迭代器模式
迭代器模式(Iterator Pattern)是一种行为型设计模式,它提供了一种顺序访问聚合对象中每个元素的方法,而不暴露其内部实现。
108 1
|
设计模式 Java 关系型数据库
访问者模式解读
访问者模式解读
|
容器
关于迭代器模式我所知道的
关于迭代器模式我所知道的
61 0
|
JavaScript 前端开发
简单理解迭代器模式
这几天研究了一下迭代器模式,期间有一段时间经常搞不太懂一些概念与概念之间的关系,今天来整理一下。
135 0
|
设计模式 程序员
访问者模式是啥?咋实现呀?
访问者模式是啥?咋实现呀?
|
设计模式 存储 容器
我学会了,迭代器模式
迭代器模式属于行为型模式,这个类型的设计模式总结出了 类、对象之间的经典交互方式,将类、对象的行为和使用解耦了,花式的去使用对象的行为来完成特定场景下的功能。
109 0
我学会了,迭代器模式
|
设计模式
我学会了,访问者模式
访问者模式属于行为型模式,这个类型的设计模式总结出了 类、对象之间的经典交互方式,将类、对象的行为和使用解耦了,花式的去使用对象的行为来完成特定场景下的功能。
124 0
我学会了,访问者模式
|
Java 容器
迭代器模式
迭代器模式
117 0