Software-Entwurfsmuster

Compound-Iterator-Implementierung

 English version  aufwärts

Der Compound-Iterator ist nach dem Bridge-Entwurfs­muster gebildet. Er benötigt ein Behavior, das den Basis­iterator, 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.

Abstrakte Klasse CompoundIteratorBehavior

Ein Behavior, das einen Compound-Iterator erzeugt, wird von der abstrakten Klasse CompoundIteratorBehavior abgeleitet. So ist sicher­gestellt, dass ein Basis­iterator, 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>
{
    /** the base iterator
     */
    public abstract Iterator<BaseType> baseIterator();

    /** the subiterator
     *  o0 is the cursor object of the base iterator
     */ 
    public abstract Iterator<SubType> subIterator(BaseType o0);

    /** specifies the object composed of the two
     *  cursor objects o0 and o1
     */ 
    public abstract CompoundType composeItems(BaseType o0, SubType o1);

    /** factory method that creates the compound iterator
     */
    public Iterator<CompoundType> iterator()
    {
        return new CompoundIterator<BaseType, SubType, CompoundType>(this);
    }

}

Compound-Iterator

Es folgt die Implementierung des Compound-Iterators.

public class CompoundIterator<BaseType, SubType, CompoundType>
implements Iterator<CompoundType>
{
    private CompoundIteratorBehavior<BaseType, SubType, CompoundType> cb;
    private boolean hasnext;
    private Iterator<BaseType> i0;
    private Iterator<SubType> i1;
    private BaseType o0;
    private CompoundType o01;

    public CompoundIterator
            (CompoundIteratorBehavior<BaseType, SubType, CompoundType> cb_)
    {
        cb=cb_;
        hasnext=true;
        i0=cb.baseIterator();
        o01=tryNext0();
    }

    public boolean hasNext()
    {
        return hasnext;
    }

    public CompoundType next()
    {
        CompoundType o=o01;
        o01=tryNext1();
        return o;
    }

    private CompoundType tryNext0()
    {
        while (i0.hasNext())
        {
            o0=i0.next();
            if (o0!=null)
            {
                i1=cb.subIterator(o0);
                return tryNext1();
            }
        }
        hasnext=false;
        return null;
    }

    private CompoundType tryNext1()
    {
        if (i1.hasNext())
            return cb.composeItems(o0, i1.next());
        else
            return tryNext0();
    }

    public void remove()
    {
        // not implemented
    }

}

 

Die Klassen CompoundIterator und CompoundIteratorBehavior finden sich auch im Java-Archiv de.fh-flensburg.inf.lang.iterators.jar.

 

Weiter mit:  [Anwendung des Compound-Iterators]   oder   up

 

homeH.W. Lang   Hochschule Flensburg   lang@hs-flensburg.de   Impressum   ©   Created: 05.02.2008   Updated: 02.03.2017
Valid HTML 4.01 Transitional

Hochschule Flensburg
Campus Flensburg

Informatik in Flensburg studieren...

 

Neu gestaltetes Studienangebot:

Bachelor-Studiengang
Angewandte Informatik

mit Schwerpunkten auf den Themen Software, Web, Mobile, Security und Usability.

Ihr Abschluss
nach 7 Semestern:
Bachelor of Science

 

Ebenfalls ganz neu:

Master-Studiengang
Angewandte Informatik

Ein projektorientiertes Studium auf höchstem Niveau mit den Schwerpunkten Internet-Sicherheit, Mobile Computing und Human-Computer Interaction.

Ihr Abschluss
nach 3 Semestern:
Master of Science

 

Weitere Informatik-Studienangebote an der Hochschule Flensburg:

Medieninformatik

Wirtschaftsinformatik