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
{
    /** the base iterator
     */
    public abstract Iterator baseIterator();

    /** the subiterator
     *  o0 is the cursor object of the base iterator
     */ 
    public abstract Iterator subIterator(Object o0);

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

    /** factory method that creates the compound iterator
     */
    public Iterator iterator()
    {
        return new CompoundIterator(this);
    }

}

Compound-Iterator

Es folgt die Implementierung des Compound-Iterators.

public class CompoundIterator implements Iterator
{
    private CompoundIteratorBehavior cb;
    private boolean hasnext;
    private Iterator i0, i1;
    private Object o0, o1;

    public CompoundIterator(CompoundIteratorBehavior cb_)
    {
        cb=cb_;
        hasnext=true;
        i0=cb.baseIterator();
        o1=tryNext0();
    }

    public boolean hasNext()
    {
        return hasnext;
    }

    public Object next()
    {
        Object o=o1;
        o1=tryNext1();
        return o;
    }

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

    private Object 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-untyped.jar.

 

Weiter mit:  [Anwendung eines 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