23 Modèles de conception, chapitre 14: Modèle d'itérateur Java
Définition: fournit une méthode pour accéder à divers éléments dans un objet de conteneur sans exposer les détails internes de l'objet.
Type: modèle de comportement
Diagramme de classe:
Si vous souhaitez demander le mode le plus couramment utilisé en Java, la réponse n'est pas le mode Singleton, ni le mode d'usine, ni le mode stratégie, mais le mode itérateur. Jetons un coup d'œil à un morceau de code d'abord:
Public static void print (collection coll) {iterator it = coll.iterator (); while (it.hasnext ()) {String str = (string) it.next (); System.out.println (STR); }}La fonction de cette méthode consiste à imprimer une boucle de collecte de chaînes et le modèle d'itérateur est utilisé dans le modèle d'itérateur. Le langage Java a pleinement implémenté le modèle d'itérateur. L'itérateur traduit en chinois signifie itérateur. En ce qui concerne les itérateurs, tout d'abord, il est lié aux ensembles. Les ensembles sont également appelés agrégats, conteneurs, etc. Nous pouvons considérer les ensembles comme des conteneurs qui peuvent contenir des objets. Par exemple, la liste, le définition, la carte et même les tableaux peuvent être appelés ensembles. La fonction des itérateurs est de traverser les objets dans le conteneur un par un.
La structure du motif d'itérateur
Contauteur abstrait: Généralement, la méthode Iterator () est fournie, telle que l'interface de collecte, l'interface de liste, l'interface définie, etc. en Java.
Conteneur spécifique: il s'agit de la classe d'implémentation concrète des conteneurs abstraits, tels que la liste ordonnée de l'interface de liste pour implémenter ArrayList, la liste liée de l'interface de liste pour implémenter LinkList, la liste de hash de l'interface set pour implémenter HashSet, etc.
Résumé Iterator: Définissez la méthode requise pour traverser les éléments. D'une manière générale, il existe trois méthodes: Obtenez la première méthode () du premier élément, obtenez la méthode suivante () de l'élément suivant, déterminez si la méthode de traversée se termine Isdone () (ou Hasnext ()), supprimer () de l'objet actuel,
Implémentation de l'itérateur: implémente les méthodes définies dans l'interface Iterator pour compléter l'itération de la collection.
Implémentation de code
Interface iterator {public objet suivant (); public booléen hasnext (); } classe ConcreteIterator implémente iterator {private list list = new ArrayList (); curseur int privé = 0; public ConcreteIterator (list list) {this.list = list; } public boolean hasnext () {if (cursor == list.size ()) {return false; } return true; } objet public suivant () {objet obj = null; if (this.hasnext ()) {obj = this.list.get (cursor ++); } return obj; }} Interface Aggregate {public void add (objet obj); public void supprimer (objet obj); Iterator Iterator Iterator (); } class ConcreteAggregate implémente agrégate {private list list = new ArrayList (); public void add (objet obj) {list.add (obj); } public iterator iterator () {return new ConcreteIterator (list); } public void retire (objet obj) {list.Remove (obj); }} public class Client {public static void main (String [] args) {agrégate ag = new concreteAggRegate (); Ag.Add ("XiaoMing"); Ag.Add ("Xiaohong"); Ag.Add ("Xiaogang"); Iterator it = ag.iterator (); while (it.hasnext ()) {String str = (string) it.next (); System.out.println (STR); }}} Dans le code ci-dessus, l'agrégat est l'interface de classe de conteneur. Vous pouvez imaginer la collection, la liste, le set, etc. Aggregate est leur version simplifiée. Il existe trois méthodes principales dans l'interface de classe de conteneur: Ajouter une méthode d'objet Ajouter, supprimer la méthode d'objet supprimer et obtenir l'itérateur de méthode itérateur. Iterator est une interface Iterator, qui a deux méthodes principales: obtenir la méthode d'objet itérative ensuite, et déterminer s'il faut itérater la méthode HasNext. Vous pouvez comparer les deux interfaces de java.util.list et java.util.iterator pour y penser vous-même.
Avantages du mode itérateur:
La méthode de traversée a été simplifiée et il est encore assez gênant de traverser la collection d'objets. Pour les tableaux ou les listes ordonnées, nous pouvons toujours les obtenir via des curseurs, mais les utilisateurs doivent traverser les objets par eux-mêmes sur le principe qu'ils ont une compréhension claire de la collection. Cependant, pour la table de hachage, il est plus difficile de traverser l'utilisateur. Après avoir introduit la méthode Iterator, il est beaucoup plus facile pour les utilisateurs.
Il existe de nombreuses façons de traverser, comme pour les listes ordonnées, nous pouvons fournir à deux itérateurs un ordre positif et une traversée d'ordre inverse en fonction des besoins. Les utilisateurs n'ont qu'à obtenir l'itérateur que nous avons mis en œuvre pour traverser facilement la collection.
L'encapsulation est bonne et les utilisateurs n'ont qu'à faire traverser un itérateur, mais ils n'ont pas à se soucier des algorithmes de traversée.
Inconvénients du modèle d'itérateur:
Pour des traversées simples (telles que des tableaux ou des listes ordonnées), il est plus lourd d'utiliser des itérateurs, et tout le monde peut penser que, comme ArrayList, nous préférons utiliser pour des boucles et obtenir des méthodes pour traverser la collection.
Scénarios applicables pour le mode itérateur
Le modèle d'itérateur est symbiotique et mort avec la collection. D'une manière générale, tant que nous mettons en œuvre une collection, nous devons fournir l'itérateur de la collection en même temps, tout comme la collection, la liste, le set, la carte, etc. En Java, ces collections ont leurs propres itérateurs. Si nous voulons implémenter un tel nouveau conteneur, bien sûr, nous devons également introduire un modèle d'itérateur pour implémenter un itérateur pour notre conteneur.
Cependant, comme la relation entre les conteneurs et les itérateurs est trop proche, la plupart des langues fournissent des itérateurs lors de la mise en œuvre de conteneurs, et les conteneurs et les itérateurs fournis par ces langues peuvent répondre à nos besoins dans la plupart des cas. Par conséquent, il est relativement rare de pratiquer par nous-mêmes le modèle d'itérateur. Nous avons seulement besoin d'utiliser les conteneurs et les itérateurs existants dans la langue.
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.