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