Voici un résumé du ** modèle d'itérateur ** dans le modèle de conception du GoF.
C'est un programme qui place les élèves dans une classe (salle de classe) et affiche les noms des élèves dans l'ordre.
Une interface qui scanne les éléments en séquence.
Iterator.java
public interface Iterator {
public abstract boolean hasNext();
public abstract Object next();
}
Une interface qui crée Iterator. Dans l'échantillon, il est appelé «agrégat».
Aggregate.java
public interface Aggregate {
public abstract Iterator iterator();
}
Une classe qui est un élément d'un agrégat. Dans l'échantillon, c'est "étudiant".
Student.java
public class Student {
private String name;
public Student(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
Une classe qui implémente l'interface définie par Aggregate. Dans l'exemple, il est appelé «salle de classe».
ClassRoom.java
public class ClassRoom implements Aggregate {
private Student[] students;
private int last = 0;
public ClassRoom(int maxsize) {
this.students = new Student[maxsize];
}
public Student getStudentAt(int index) {
return students[index];
}
public void appendStudent(Student student) {
this.students[last] = student;
last++;
}
public int getLength() {
return last;
}
public Iterator iterator() {
return new ClassRoomIterator(this);
}
}
Une classe qui implémente l'interface définie par Iterator.
ClassRoomIterator.java
public class ClassRoomIterator implements Iterator {
private ClassRoom classRoom;
private int index;
public ClassRoomIterator(ClassRoom classRoom) {
this.classRoom = classRoom;
this.index = 0;
}
public boolean hasNext() {
if (index < classRoom.getLength()) {
return true;
} else {
return false;
}
}
public Object next() {
Student student = classRoom.getStudentAt(index);
index++;
return student;
}
}
Cette classe effectue le traitement principal.
Main.java
public class Main {
public static void main(String[] args) {
ClassRoom classRoom = new ClassRoom(4);
classRoom.appendStudent(new Student("Tanaka"));
classRoom.appendStudent(new Student("Yamada"));
classRoom.appendStudent(new Student("Suzuki"));
classRoom.appendStudent(new Student("Sato"));
Iterator iterator= classRoom.iterator();
while (iterator.hasNext()) {
Student student = (Student)iterator.next();
System.out.println(student.getName());
}
}
}
Tanaka
Yamada
Suzuki
Sato
L'avantage du modèle Iterator est qu'il peut être compté séparément de l'implémentation. Les modèles de conception permettent aux classes d'être utilisées en tant que pièces et favorisent la réutilisabilité. Les seules méthodes Iterator utilisées dans la ** classe principale ** de l'exemple de programme sont ** hasNext () et next () **. En d'autres termes, l'implémentation ne dépend pas de la ** classe ClassRoom **, vous n'avez donc pas à vous soucier de la taille du tableau.
Cet article et exemple de programme ont été créés à partir des livres suivants.
C'était très facile à comprendre et j'ai beaucoup appris. Je vous remercie. Les explications détaillées des modèles de conception et des exemples de programmes sont écrites, veuillez donc également consulter les livres.
Recommended Posts