[JAVA] Iteratormuster

Nur hasNext () und next () können vom Benutzer bedient werden Durch Ausblenden der Iterator-Implementierungsklasse Beseitigen Sie die Abhängigkeit zwischen Benutzer und Iterator-Implementierungsklasse

Auf dieser Seite ・ Überprüfen der Struktur des Iterators ・ Verschleierung des Iterators ・ Iteratormuster und objektorientiert Beschreibt über

Design Pattarm MENU

Strukturelle Bestätigung des Iterators

Überprüfen Sie mit der folgenden Klassenkonfiguration

Klasse Erläuterung
sam.class Array und Iterator()haben
Itarator.class sam.Rufen Sie ein Array-Element der Klasse auf
user(Main.class) sam.benutze Klasse

Die Grundstruktur der Klassen sam und Iterator sieht folgendermaßen aus:

sam.class


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

Iterator.class


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

Lassen Sie uns tatsächlich jede Klasse machen

sam.class


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

  Iterator iterate(){           //Gibt Iterator zurück
    return new Iterator(this.i); // Iterator.Übergeben Sie ein Array von sam als Argument an class
  }
}

Iterator.class


class Iterator{
  int[] i;                      // sam.Speichert ein Array von Klassen A.
  int index=0;                  //Eine Variable, die die Elemente eines Arrays B zählt

  Iterator(int[] i){this.i=i;}  // sam.Nehmen Sie ein Array aus der Klasse und speichern Sie es in A.

  boolean hasNext(){
    boolean b=false;
    if(index<i.length){b=true;} //Vergleichen Sie die Anzahl der Elemente im Array mit dem Wert B, um festzustellen, ob das nächste Element vorhanden ist:
    else{return b;}
    return b;
  }

  int next(){
    int ans = i[index];         //Sam das aktuelle Element.Kehre zum Unterricht zurück
    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());}
}}

Iterator-Verschleierung

Überprüfen Sie mit der folgenden Klassenkonfiguration

Klasse Erläuterung
Interface.interface user(Main.class)Ist Schnittstelle und Verwendung.Sam über Klasse.Verwenden Sie die Funktion der Klasse
use.class sam.Geben Sie eine Instanz der Klasse aus
sam.class Implementieren Sie vom Benutzer verwendete Funktionen (Array- und Iteratorfunktion).
Iterator.interface Benutzer und SamIterator.Vermittlungsklasse
samIterator sam.Rufen Sie ein Array-Element der Klasse auf

Die grundlegende Klassenstruktur ist wie folgt

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(){}
}

[Iteratorseite]

Iterator.interface


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

samIterator.class


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

Lassen Sie uns jede Klasse machen

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

Iteratormuster und objektorientiert

Verwenden Sie vom Benutzer einfach use.class und zwei Schnittstellen Jede Implementierungsklasse ist unsichtbar, wodurch die Abhängigkeit beseitigt wird

Entwickler können den Inhalt des Arrays sam.class ändern Auch wenn Sie zur Zweigverarbeitung wechseln, um Map abhängig von den Bedingungen zu verwenden Auf der Benutzerseite muss nichts geändert werden, solange Iterator funktioniert

Recommended Posts

Iteratormuster
Iteratormuster
Entwurfsmuster ~ Iterator ~
Prototypmuster
Erinnerungsmuster
Beobachtermuster
Builder-Muster
Brückenmuster
Befehlsmuster
Builder-Muster
Strategiemuster
Iterator Memo
Besuchermuster
Adaptermuster
Proxy-Muster
Strategiemuster
Zusammengesetztes Muster
Singleton-Muster
Singleton-Muster
Prototypmuster
Fassadenmuster
Dekorationsmuster
Fliegengewichtsmuster
Dekorateur Muster
Vermittlermuster
Fassadenmuster
Besuchermuster
Brückenmuster
Ich habe versucht, das Iterator-Muster zu implementieren
abstraktes Fabrikmuster
Entwurfsmuster ~ Builder ~
[Java] Strategiemuster
Java-Entwurfsmuster
Java-Rückrufmuster
Entwurfsmuster ~ Proxy ~
Entwurfsmuster ~ Zustand ~
Factory Method Pattern
Entwurfsmuster ~ Strategie ~
Entwurfsmuster ~ Singleton ~
Entwurfsmuster ~ Composite ~
Entwurfsmuster (2): Builder
Entwurfsmuster (1): AbstractFactory
[Java] Singleton-Muster
Entwurfsmuster ~ Befehl ~
Abstraktes Fabrikmuster
Entwurfsmuster ~ Fassade ~
Entwurfsmuster ~ Brücke ~
Entwurfsmuster ~ Mediator ~
Muster der Vorlagenmethode
Entwurfsmuster ~ Dekorateur ~
Muster der Vorlagenmethode
Entwurfsmuster ~ Interpreter ~
Factory Method Muster
Entwurfsmuster ~ Beobachter ~
Entwurfsmuster ~ Prototyp ~
[Java] Adaptermuster
Entwurfsmuster ~ Memento ~
Entwurfsmuster ~ Adapter ~
Entwurfsmuster ~ Fliegengewicht ~
Java-Muster-Memo