Domo est Fugito.
Cette fois, Hiroshi Yuki "Introduction aux modèles de conception appris en langage Java" Modèle de conception en se référant à (SB Creative) Nous implémenterons le "modèle Iterator" qui est l'un des Je vais.
Le modèle Iterator est une collection de beaucoup de choses Parfois, ordonnez-le et scannez le C'est pour effectuer le traitement à effectuer. (P.2)
Par exemple, "L'identité des objets dans le sac un par un Je pense que c'est un programme appelé "recherche".
Dans ce livre, comme exemple de programme, "Entrez dans la bibliothèque Recherchez les livres et affichez les noms des livres dans l'ordre. " Est introduit. Cette fois, j'ai ajouté un arrangement là-bas "** Afficher les chansons de la liste des chansons une par une **" Je pensais que j'écrirais le programme dans le modèle Iterator Je vais.
Nombre d'interfaces agrégées Représente un «agrégat» de choses à faire. (P.3)
Ici, "Song Aggregate", qui signifie "collection de chansons" Créez une interface appelée.
public interface SongAggregate {
public abstract SongIterator songIterator();
}
Cette interface compte les agrégats Déclarez uniquement la méthode "songIterator" pour.
L'interface Iterator compte les éléments Agit comme une variable de boucle C'est une chose.
Ici, créez "Song Iterator".
public interface SongIterator {
public abstract boolean hasNext();
public abstract Object next();
}
La méthode hasNext a-t-elle les éléments suivants dans «l'agrégat»? C'est pour vérifier. Aussi, la méthode suivante Si vous avez l'élément suivant, vous obtiendrez cet élément.
C'est une classe pour représenter chaque "chanson".
public class Song {
private String songName;
public Song(String s) {
this.songName = s;
}
public String getSongName() {
return songName;
}
}
Cette classe exprime "une collection de chansons". Implémenter l'interface SongAggregate avec des méthodes abstraites Remplacez la méthode songIterator qui s'y trouvait.
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);
}
}
Ici, la chanson est maximisée par le constructeur Définissez une instance SongList pouvant stocker jusqu'à Faire. La méthode getSongAt renvoie la chanson idth. La méthode appendSong est à la fin du tableau des chansons [] Enregistre une nouvelle chanson s. getLength renvoie le nombre de morceaux dans la SongList La méthode. Et dans la méthode songIterator remplacée, De la classe SongListIterator que nous allons créer Créez une instance et renvoyez-la en tant que type SongIterator.
En fait, scannez la classe SongList C'est une classe. Interface Real SongIterator Faire semblant d'être au-dessus de la méthode hasNext et de la méthode suivante Balade
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;
}
}
Vous êtes maintenant prêt à parcourir la liste. d'ici Créer une classe principale pour créer une liste réelle et analyser Je vais essayer.
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());
}
}
}
Le résultat de l'exécution est le suivant.
So What
Freddie Freeloader
Blue In Green
All Blues
Flamenco Sketches
Il semble qu'il a été exécuté correctement. Bon chagrin.
Après tout, le point du modèle Iterator est "** Même si je réécris la SongList, la méthode songIterator fonctionne toujours. S'il existe et renvoie le SongIterator correct, le message principal La boucle while de Sod fonctionne sans aucun changement ** " C'est au point. En bref, un design capable de résister à l'expansion des fonctions Cela signifie qu'il est devenu. C’est juste «la sagesse du terrain» Je me sens comme ça.
À partir de maintenant, 23 modèles de conception GoF seront utilisés de cette manière. J'aimerais pouvoir le mettre ensemble.
alors, c'est tout pour aujourd'hui. C'était Fugi.
P.S. "Seniors", avis sur cet article, N'hésitez pas à commenter si vous avez des suppléments m (_ _) m
Recommended Posts