Patron Itérateur
Le patron Iterator est un modèle de conception très couramment utilisé dans les environnements de programmation Java et .Net.
Le patron Iterator fournit un moyen d'accéder séquentiellement aux éléments d'un objet agrégé sans exposer sa représentation interne.
Le patron Iterator est un patron comportemental.
Introduction
intention
Permet un accès séquentiel aux éléments d'un objet agrégé sans exposer la représentation interne de l'objet.
Principaux problèmes résolus
- Fournit une méthode unifiée pour parcourir différents objets agrégés.
Cas d'utilisation
- Lorsque vous devez parcourir un objet agrégé sans exposer sa structure interne.
Approche d'implémentation
- Définir l'interface de l'itérateur: contient
hasNext()etnext()et d'autres méthodes, utilisées pour parcourir des éléments. - Créer un itérateur concret: implémente l'interface de l'itérateur et définit comment parcourir un objet agrégé spécifique.
- Classe agrégat: définit une interface pour renvoyer un objet itérateur.
Code clé
- Interface Iterator: spécifie les méthodes de parcours des éléments.
- Itérateur concret: implémente l’interface Iterator et contient la logique de parcours.
Exemple d'application
- Iterator en Java: les itérateurs du Java Collections Framework sont utilisés pour parcourir les éléments d’une collection.
Avantages
- Prend en charge plusieurs méthodes de parcours.: différents itérateurs peuvent définir différentes méthodes de parcours.
- Simplifier la classe agrégat: la classe agrégat n’a pas besoin de se soucier de la logique de parcours.
- Prise en charge de parcours multiples: plusieurs parcours peuvent être effectués simultanément sur le même objet agrégat.
- Extensibilité: l’ajout de nouvelles classes d’agrégats et de nouvelles classes d’itérateurs est très pratique sans modifier le code existant.
Inconvénients
- Complexité du système: chaque fois qu’une classe d’agrégat est ajoutée, une classe d’itérateur correspondante doit être ajoutée, ce qui augmente le nombre de classes.
Suggestions d'utilisation
- Lorsque vous devez accéder au contenu d’un objet agrégat sans exposer sa représentation interne, utilisez le patron Iterator.
- Lorsque vous devez fournir plusieurs méthodes de parcours pour un objet agrégat, envisagez d’utiliser le patron Iterator.
Notes
- Le patron Iterator sépare le comportement de parcours des objets de collection, permettant au code externe d’accéder de manière transparente aux données internes de la collection sans exposer sa structure interne.
Structure
Le patron Iterator comprend les principaux rôles suivants :
Interface Iterator (Iterator): définit des méthodes pour accéder à chaque élément d’un objet agrégat et pour le parcourir, incluant généralement l’obtention de l’élément suivant, la vérification de l’existence d’autres éléments, l’obtention de la position actuelle et d’autres méthodes.
Itérateur concret (Concrete Iterator): implémente l’interface d’itérateur et est responsable du parcours et de l’accès à l’objet agrégat tout en enregistrant la position de parcours actuelle.
Interface Aggregate (Aggregate): définit une interface pour créer des objets itérateurs, incluant généralement une méthode de fabrique pour créer des objets itérateurs.
Agrégat concret (Concrete Aggregate): implémente l’interface Aggregate et est responsable de la création d’objets itérateurs concrets et de la fourniture des données à parcourir.
Implémentation
Nous allons créer une interface qui décrit les méthodes de navigation.Iteratorinterface et une interface qui renvoie un itérateur.ContainerInterface. ImplémentéContainerLes classes concrètes de l’interface seront responsables de l’implémentation.IteratorInterface.
IteratorPatternDemo, notre classe de démonstration utilise la classe concrète.NamesRepositoryPour afficherNamesRepositoryStocké sous forme de collection dansNames。
Étape 1
Créer l’interface :
Iterator.java
Container.java
Étape 2
Créer une implémentationContainerclasse concrète de l'interface. Cette classe a implémenté.IteratorClasse interne de l'interfaceNameIterator。
NameRepository.java
Étape 3
UtilisationNameRepositorypour obtenir l'itérateur, et afficher les noms.
IteratorPatternDemo.java
Étape 4
Exécutez le programme, affichez les résultats :
Name : Robert Name : John Name : Julie Name : Loraautres extensions