Latest web development tutorials

Mode itératif

Mode itératif (Iterator Pattern) de l'environnement de programmation Java et .Net est un modèle de conception très commun. Ce mode est utilisé pour les éléments d'accès séquentiels d'une collection d'objets, une collection d'objets n'a pas besoin de connaître la représentation sous-jacente.

motif Iterator appartient modèles comportementaux.

introduction

Intention: Fournir un moyen d'accéder à un objet dans chaque élément de la polymérisation, mais pas besoin d'exposer l'intérieur de l'objet.

Principalement pour résoudre: une autre façon de traverser l'objet d'intégration entière.

Quand utiliser: traversant un objet polymère.

Comment fixer: la promenade entre les éléments de la responsabilité de itérateurs au lieu des objets globaux.

Le code clé: définir l'interface: hasNext, à côté.

Exemples d'application: JAVA dans l'itérateur.

Avantages: 1, qui soutient d' une manière différente de traverser un objet global.2, ce qui simplifie la classe polymérisation iterator. 3, de la même polymérisation peut avoir des parcours multiples. 4, dans un mode itératif, ajouter une nouvelle classe de classe itérateur polymère et facile, sans modifier le code original.

Inconvénients: En raison de la séparation des tâches iterator stockage de données de configuration et les données de cheminement, ajouter de nouvelles classes agrégées exigent une augmentation correspondante dans la nouvelle classe iterator, le nombre de classes paires augmente, ce qui augmente la complexité du système dans une certaine mesure.

Scénarios d' utilisation:1, l' accès à un objet contenu polymère sans avoir à exposer sa représentation interne. 2, la nécessité de fournir une variété d'agrégats méthode objet traversal. 3 pour traverser la structure globale différente fournit une interface unifiée.

Remarques: le mode itératif est séparé comportement de la traversée d'une collection d'objets, classe abstraite d' un itérateur d'être responsable, de sorte que les deux peuvent se faire sans exposition à la structure interne de la collection, mais permettent également le code d' accès transparent externe à la collecte de données interne.

réalisation

Nous allons créer une interface narrativeIteratoret une méthode de navigation Retourne un itérateur de l'interfacede conteneurs.classe entitéContainerimplémente l'interface sera responsable de la mise en œuvre del'interface Iterator.

IteratorPatternDemo,nos classes de démonstration utilisent la classe d'entité pour imprimerNamesRepositoryNamesRepository stockées sous forme de collectionNames.

motif Iterator diagramme UML

Etape 1

Créer une interface.

Iterator.java

public interface Iterator {
   hasNext public boolean ();
   Public Object next ();
}

Container.java

interface publique Container {
   publique Iterator getIterator ();
}

Etape 2

Créer classe d'entitéContainerimplémente l'interface. Cette classe a réalisé l'interfaceNameIteratorIterator de classe interne.

NameRepository.java

NameRepository public class implémente Container {
   Les noms de chaînes publiques [] = { "Robert", "John", "Julie", "Lora"};

   @Override
   publique Iterator getIterator () {
      return new NameIterator ();
   }

   NameIterator private class implémente Iterator {

      index int;

      @Override
      hasNext public boolean () {
         if (index <names.length) {
            return true;
         }
         return false;
      }

      @Override
      Public Object next () {
         if (this.hasNext ()) {
            retour noms [index ++];
         }
         return null;
      }		
   }
}

Etape 3

UtilisezNameRepositorypour obtenir itérateurs, et imprimer les noms.

IteratorPatternDemo.java

public class IteratorPatternDemo {
	
   main (String [] args) {public static void
      NameRepository namesRepository = new NameRepository ();

      pour (Iterator iter = namesRepository.getIterator (); iter.hasNext ();) {
         String name = (String) iter.next ();
         System.out.println ( "Nom:" + nom);
      } 	
   }
}

Etape 4

Vérifiez la sortie.

Nom: Robert
Nom: John
Nom: Julie
Nom: Lora