[JAVA] Modèle d'itérateur

Seuls hasNext () et next () peuvent être utilisés par l'utilisateur En masquant la classe d'implémentation Iterator Élimine la dépendance entre l'utilisateur et la classe d'implémentation Iterator

Sur cette page ・ Vérification de la structure d'itérateur ・ Dissimulation de l'itérateur ・ Modèle d'itérateur et orienté objet Décrit sur

Design Pattarm MENU

Confirmation structurelle d'itérateur

Vérifiez avec la configuration de classe suivante

classe Explication
sam.class Tableau et itérateur()avoir
Itarator.class sam.Appeler un élément de tableau de classe
user(Main.class) sam.utiliser la classe

La structure de base des classes sam et Iterator ressemble à ceci:

sam.class


class sam{
  int[] i= {0,1,2};
  Iterator iterate(){}
}

Iterator.class


class Iterator{
  boolean hasNext(){}
  int next(){}
}

Faisons en fait chaque classe

sam.class


class sam{
  int[] i={0,1,2};

  Iterator iterate(){           //Renvoie Iterator
    return new Iterator(this.i); // Iterator.Passer un tableau de sam à la classe comme argument
  }
}

Iterator.class


class Iterator{
  int[] i;                      // sam.Stocke un tableau de classes A
  int index=0;                  //Une variable qui compte les éléments d'un tableau B

  Iterator(int[] i){this.i=i;}  // sam.Prenez un tableau de la classe et stockez-le dans A

  boolean hasNext(){
    boolean b=false;
    if(index<i.length){b=true;} //Comparez le nombre d'éléments du tableau avec la valeur de B pour déterminer si l'élément suivant est présent:
    else{return b;}
    return b;
  }

  int next(){
    int ans = i[index];         //Sam l'élément actuel.Retour en classe
    index++;
    return ans;
  }
}

user(Main.class)


public static void main(String[] args){
  sam s1 = new sam();
  Iterator it = s1.iterate();
  while(it.hasNext()){
    System.out.println((int) it.next());}
}}

Dissimulation de l'itérateur

Vérifiez avec la configuration de classe suivante

classe Explication
Interface.interface user(Main.class)Est l'interface et l'utilisation.sam via la classe.Utilisez la fonction de classe
use.class sam.Émettre une instance de classe
sam.class Implémenter les fonctions utilisées par l'utilisateur (tableau et fonction Itérateur)
Iterator.interface user et samIterator.Classe médiatrice
samIterator sam.Appeler un élément de tableau de classe

La structure de base de la classe est la suivante

Interface.interface


interface Interface{
  Iterator iterate();
}

use.class


class use {
  Interface newInstance(){}
}

sam.class


class sam implements Interface{
  int[] i={0,1,2};
  Iterator iterate(){}
}

[Côté itérateur]

Iterator.interface


interface Iterator{
  boolean hasNext();
  int     next();
}

samIterator.class


class samIterator implements Iterator{
  samIterator(){}
  public  boolean hasNext(){}
  public  int next(){}
}

Faisons de chaque classe

Interface.interface


interface Interface{
  Iterator iterate();
}

use.class


class use {
  public static Interface newInstance(){
         return new sam();}
}

sam.class


class sam implements Interface{
  private int[] i={0,1,2};

  public  Iterator iterate(){
          return new samIterator(this.i);
  }
}

Iterator.interface


interface Iterator{
  boolean hasNext();
  int     next();
}

samIterator.class


class samIterator implements Iterator{
  private int i[];
  private int index=0;

  samIterator(int[] i){
          this.i=i;
  }

  public  boolean hasNext(){
          if(index<i.length){return true;}
          else{return false;}
  }

  public  int next(){
          int ans = i[index];
          index++;
          return ans;}
}

user(Main.class)


public static void main(String[] args){
  Interface face = use.newInstance();
  Iterator  it   = face.iterate();
  while(it.hasNext()){
    System.out.println(it.next());
}

Modèle d'itérateur et orienté objet

De l'utilisateur, utilisez simplement use.class et deux interfaces Chaque classe d'implémentation est invisible, ce qui élimine la dépendance

Les développeurs peuvent modifier le contenu du tableau sam.class Même si vous passez au traitement de branche pour utiliser Map en fonction des conditions Rien ne doit être changé côté utilisateur tant que Iterator fonctionne

Recommended Posts

Modèle d'itérateur
Modèle d'itérateur
Modèle de conception ~ Itérateur ~
Modèle de prototype
Motif de souvenir
Modèle d'observateur
Modèle de constructeur
Modèle de pont
Modèle de commande
Modèle de constructeur
Modèle de stratégie
Mémo Itérateur
Modèle de visiteur
Modèle d'adaptateur
Modèle de proxy
Modèle de stratégie
Motif composite
Motif singleton
Motif singleton
Modèle de prototype
Modèle de façade
Motif décorateur
Modèle de poids mouche
Motif décorateur
Modèle de médiateur
Motif de façade
Modèle de visiteur
Modèle de pont
J'ai essayé d'implémenter le modèle Iterator
modèle d'usine abstrait
Modèle de conception ~ Constructeur ~
[Java] Modèle de stratégie
Modèle de conception Java
modèle de rappel java
Modèle de conception ~ Proxy ~
Modèle de conception ~ État ~
Modèle de méthode d'usine
Modèle de conception ~ Stratégie ~
Modèle de conception ~ Singleton ~
Modèle de conception ~ Composite ~
Modèle de conception (2): constructeur
Modèle de conception (1): AbstractFactory
[Java] Motif singleton
Modèle de conception ~ Commande ~
Modèle d'usine abstraite
Modèle de conception ~ Façade ~
Modèle de conception ~ Pont ~
Modèle de conception ~ Médiateur ~
Modèle de méthode de modèle
Modèle de conception ~ Décorateur ~
Modèle de modèle de méthode
Modèle de conception ~ Interprète ~
Modèle de méthode d'usine
Modèle de conception ~ Observateur ~
Modèle de conception ~ Prototype ~
[Java] Modèle d'adaptateur
Modèle de conception ~ Memento ~
Modèle de conception ~ Adaptateur ~
Modèle de conception ~ Poids mouche ~
Mémo de modèle Java