Hier ist eine Zusammenfassung des ** Iterator-Musters ** im GoF-Entwurfsmuster.
Es ist ein Programm, das Schüler in eine Klasse (Klassenzimmer) einordnet und die Namen der Schüler der Reihe nach anzeigt.
Eine Schnittstelle, die Elemente nacheinander scannt.
Iterator.java
public interface Iterator {
public abstract boolean hasNext();
public abstract Object next();
}
Eine Schnittstelle, die Iterator erstellt. In der Stichprobe wird es als "Aggregat" bezeichnet.
Aggregate.java
public interface Aggregate {
public abstract Iterator iterator();
}
Eine Klasse, die ein Element eines Aggregats ist. In der Stichprobe ist es "Student".
Student.java
public class Student {
private String name;
public Student(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
Eine Klasse, die die von Aggregate definierte Schnittstelle implementiert. In der Stichprobe wird es als "Klassenzimmer" bezeichnet.
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);
}
}
Eine Klasse, die die von Iterator definierte Schnittstelle implementiert.
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;
}
}
Diese Klasse führt die Hauptverarbeitung durch.
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
Der Vorteil des Iteratormusters besteht darin, dass es getrennt von der Implementierung gezählt werden kann. Entwurfsmuster ermöglichen die Verwendung von Klassen als Teile und fördern die Wiederverwendbarkeit. Die einzigen Iterator-Methoden, die in der ** Hauptklasse ** des Beispielprogramms verwendet werden, sind ** hasNext () und next () **. Mit anderen Worten, die Implementierung hängt nicht von der ** ClassRoom-Klasse ** ab, sodass Sie sich keine Gedanken über die Größe des Arrays machen müssen.
Dieser Artikel und das Beispielprogramm wurden basierend auf den folgenden Büchern erstellt.
Es war sehr leicht zu verstehen und ich habe viel gelernt. Vielen Dank. Die detaillierten Erklärungen zu den Entwurfsmustern und Beispielprogrammen sind geschrieben. Schauen Sie sich also auch die Bücher an.
Recommended Posts