[JAVA] J'ai essayé d'implémenter le modèle Iterator

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.

Quel est le modèle Iterator?

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.

Interface agrégée

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.

Interface d'itérateur

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.

Classe de chanson

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;
	}
}

Classe SongList

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.

Classe SongListIterator

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.

Résumé

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

J'ai essayé d'implémenter le modèle Iterator
J'ai essayé d'implémenter la méthode de division mutuelle d'Eugrid en Java
J'ai essayé d'expliquer la méthode
J'ai essayé d'implémenter la fonction similaire par communication asynchrone
J'ai essayé de résumer les méthodes utilisées
J'ai essayé de résumer l'API Stream
J'ai essayé d'implémenter la fonction de prévisualisation d'image avec Rails / jQuery
J'ai essayé d'implémenter des relations polymorphes à Nogizaka.
J'ai essayé d'organiser la session en Rails
J'ai essayé de configurer tomcat pour exécuter le servlet.
J'ai essayé d'implémenter un serveur en utilisant Netty
J'ai essayé d'implémenter le téléchargement de fichiers avec Spring MVC
J'ai essayé d'implémenter TCP / IP + BIO avec JAVA
J'ai essayé d'implémenter la notification push Firebase en Java
05. J'ai essayé de supprimer la source de Spring Boot
J'ai essayé de réduire la capacité de Spring Boot
J'ai essayé d'implémenter Sterling Sort avec Java Collector
[Java] J'ai essayé de mettre en œuvre la recherche de produits de l'API Yahoo
J'ai essayé le problème FizzBuzz
J'ai essayé de vérifier yum-cron
J'ai essayé d'augmenter la vitesse de traitement avec l'ingénierie spirituelle
[JDBC] J'ai essayé d'accéder à la base de données SQLite3 depuis Java.
J'ai essayé de résumer les bases de kotlin et java
J'ai brièvement résumé la grammaire de base de Ruby
J'ai essayé de construire l'environnement petit à petit en utilisant docker
[Rails] J'ai essayé d'implémenter le traitement par lots avec la tâche Rake
J'ai essayé de créer un environnement de WSL2 + Docker + VSCode
J'ai essayé d'implémenter une application web pleine de bugs avec Kotlin
J'ai essayé de valider pour unifier comment écrire des balises de hachage
J'ai essayé de mâcher C # (indexeur)
J'ai essayé de résumer le support d'iOS 14
J'ai essayé le framework Java "Quarkus"
[Rails] J'ai essayé de supprimer l'application
L'histoire que je voulais développer Zip
J'ai essayé de résumer l'apprentissage Java (1)
J'ai essayé de résumer Java 8 maintenant
C # (polymorphisme: polymorphisme)
J'ai essayé d'expliquer Active Hash
J'ai essayé de résoudre le problème de la "sélection multi-étapes" avec Ruby
Modèle d'itérateur
[Metal] J'ai essayé de comprendre le flux jusqu'au rendu avec Metal
J'ai essayé d'implémenter le traitement Ajax de la fonction similaire dans Rails
J'ai essayé de résumer ce qui était demandé lors de l'édition site-java-
J'ai essayé d'illuminer le sapin de Noël dans un jeu de la vie
Tri des données Décroissant, croissant / Rails
J'ai essayé de créer un environnement de serveur UML Plant avec Docker
Modèle d'itérateur