Compound-Iterator-Implementierung
Der Compound-Iterator ist nach dem Bridge-Entwurfsmuster gebildet. Er benötigt ein Behavior, das den Basisiterator, den Subiterator und die Funktion composeItems angibt. Ein solches konkretes Behavior wird von der abstrakten Klasse CompoundIteratorBehavior abgeleitet; diese enthält auch gleich die Factory-Methode iterator, um den so gebildeten Compound-Iterator zu erzeugen.
Ein Behavior, das einen Compound-Iterator erzeugt, wird von der abstrakten Klasse CompoundIteratorBehavior abgeleitet. So ist sichergestellt, dass ein Basisiterator, ein Subiterator und die Funktion composeItems vorhanden sind; außerdem steht die Factory-Methode iterator zur Verfügung.
public abstract class CompoundIteratorBehavior<BaseType, SubType, CompoundType>
implements Iterable<CompoundType>
{
public abstract Iterator<BaseType> baseIterator();
public abstract Iterator<SubType> subIterator(BaseType x0);
public abstract CompoundType composeItems(BaseType x0, SubType x1);
public Iterator<CompoundType> iterator()
{
return new CompoundIterator<BaseType, SubType, CompoundType>(this);
}
}
Es folgt die Implementierung des Compound-Iterators.
public class CompoundIterator<BaseType, SubType, CompoundType>
implements Iterator<CompoundType>
{
private CompoundIteratorBehavior<BaseType, SubType, CompoundType> behavior;
private boolean hasnext;
private Iterator<BaseType> it0;
private Iterator<SubType> it1;
private BaseType x0;
private CompoundType x01;
public CompoundIterator(CompoundIteratorBehavior<BaseType, SubType, CompoundType> behavior)
{
this.behavior=behavior;
hasnext=true;
it0=behavior.baseIterator();
x01=tryNext0();
}
@Override
public boolean hasNext()
{
return hasnext;
}
@Override
public CompoundType next()
{
CompoundType x=x01;
x01=tryNext1();
return x;
}
private CompoundType tryNext0()
{
while (it0.hasNext())
{
x0=it0.next();
if (x0!=null)
{
it1=behavior.subIterator(x0);
return tryNext1();
}
}
hasnext=false;
return null;
}
private CompoundType tryNext1()
{
if (it1.hasNext())
return behavior.composeItems(x0, it1.next());
else
return tryNext0();
}
}
Weiter mit: [Anwendung des Compound-Iterators] oder
[up]
H.W. Lang mail@hwlang.de Impressum Datenschutz
Created: 05.02.2008 Updated: 18.02.2023
Diese Webseiten sind während meiner Lehrtätigkeit an der Hochschule Flensburg entstanden