Domo ist Fugito.
Diesmal Hiroshi Yuki "Einführung in in Java gelernte Entwurfsmuster" Entwurfsmuster unter Bezugnahme auf (SB Creative) Wir werden das "Iteratormuster" implementieren, das eines der Ich werde.
Das Iterator-Muster ist eine Sammlung vieler Dinge Weisen Sie es manchmal in der richtigen Reihenfolge an und scannen Sie das Ganze Es dient zur Durchführung der Verarbeitung. (P.2)
Zum Beispiel: "Die Identität der Dinge in der Tasche nacheinander Ich denke, es ist ein Programm namens "Suche".
In diesem Buch als Beispielprogramm "In das Bücherregal eingeben Schlagen Sie die Bücher nach und zeigen Sie die Namen der Bücher der Reihe nach an. " Ist vorgestellt. Diesmal habe ich dort ein Arrangement hinzugefügt "** Titel in der Songliste einzeln anzeigen **" Ich dachte, ich würde das Programm im Iterator-Muster schreiben Ich werde.
Gesamtzahl der Schnittstellen Stellt ein "Aggregat" von zu erledigenden Aufgaben dar. (P.3)
Hier "Song Aggregate", was für "Sammlung von Songs" steht Erstellen Sie eine Schnittstelle namens.
public interface SongAggregate {
public abstract SongIterator songIterator();
}
Diese Schnittstelle zählt Aggregate Deklarieren Sie nur die Methode "songIterator" für.
Iterator-Schnittstelle zählt Elemente Wirkt wie eine Schleifenvariable Es ist eine Sache.
Erstellen Sie hier "Song Iterator".
public interface SongIterator {
public abstract boolean hasNext();
public abstract Object next();
}
Hat die hasNext-Methode die folgenden Elemente im "Aggregat"? Es dient zur Überprüfung. Auch die nächste Methode Wenn Sie das folgende Element haben, erhalten Sie dieses Element.
Dies ist eine Klasse, die jedes "Lied" darstellt.
public class Song {
private String songName;
public Song(String s) {
this.songName = s;
}
public String getSongName() {
return songName;
}
}
Diese Klasse drückt "eine Sammlung von Liedern" aus. Implementieren Sie die SongAggregate-Schnittstelle mit abstrakten Methoden Überschreiben Sie die dort vorhandene songIterator-Methode.
public class SongList implements SongAggregate {
private Song[] songs;
private int last = 0;
public SongList(int max) {
this.songs = new Song[max];
}
public Song getSongAt(int id) {
return songs[id];
}
public void appendSong(Song s) {
this.songs[last] = s;
last++;
}
public int getLength() {
return last;
}
@Override
public SongIterator songIterator() {
return new SongListIterator(this);
}
}
Hier wird das Lied vom Konstrukteur maximal genutzt Definieren Sie eine SongList-Instanz, die bis zu speichern kann tun. Die Methode getSongAt gibt das id-te Lied zurück. Die appendSong-Methode befindet sich am Ende der Array-Songs [] Speichert ein neues Lied s. getLength gibt die Anzahl der Songs in der SongList zurück Die Methode. Und in der überschriebenen songIterator-Methode Von der Klasse namens SongListIterator, die wir erstellen werden Erstellen Sie eine Instanz und geben Sie sie als SongIterator-Typ zurück.
Scannen Sie tatsächlich die SongList-Klasse Es ist eine Klasse. Echte SongIterator-Schnittstelle Vorgeben, über der hasNext-Methode und der nächsten Methode zu sein Reiten
public class SongListIterator implements SongIterator {
private SongList songList;
private int id;
public SongListIterator(SongList sl) {
this.songList = sl;
this.id = 0;
}
@Override
public boolean hasNext() {
if(id < songList.getLength()) {
return true;
}else {
return false;
}
}
@Override
public Object next() {
Song song = songList.getSongAt(id);
id++;
return song;
}
}
Jetzt können Sie die Liste scannen. von hier Erstellen Sie eine Hauptklasse, um eine aktuelle Liste zu erstellen und zu scannen Ich werde versuchen.
public class Main {
public static void main(String[] args) {
//新しくSongListを作成
SongList songList = new SongList(5);
//リストに曲を追加
songList.appendSong(new Song("So What"));
songList.appendSong(new Song("Freddie Freeloader"));
songList.appendSong(new Song("Blue In Green"));
songList.appendSong(new Song("All Blues"));
songList.appendSong(new Song("Flamenco Sketches"));
//SongIteratorのインスタンスを生成
SongIterator song_it = songList.songIterator();
//曲をひとつずつ調べる
while(song_it.hasNext()) {
Song song = (Song)song_it.next();
System.out.println(song.getSongName());
}
}
}
Das Ausführungsergebnis ist wie folgt.
So What
Freddie Freeloader
Blue In Green
All Blues
Flamenco Sketches
Es scheint, dass es richtig ausgeführt wurde. Guter Kummer.
Immerhin ist der Punkt des Iteratormusters "** Auch wenn ich die SongList neu schreibe, funktioniert die songIterator-Methode immer noch. Wenn es existiert und den richtigen SongIterator zurückgibt, die Hauptnachricht Sods while-Schleife funktioniert ohne Änderungen ** " Es ist am Punkt. Kurz gesagt, ein Design, das der Erweiterung von Funktionen standhält Es bedeutet, dass es geworden ist. Es ist nur "die Weisheit des Feldes" Ich fühle mich so.
Ab sofort werden 23 GoF-Entwurfsmuster so verwendet. Ich wünschte, ich könnte es zusammenstellen.
Also, das war's für heute. Es war Fugi.
P.S. "Senioren", Meinungen zu diesem Artikel, Bitte zögern Sie nicht zu kommentieren, wenn Sie Ergänzungen m (_ _) m haben
Recommended Posts