Software-Entwurfsmuster

Filteriterator-Implementierung

 aufwärts

Der Filter­iterator ist nach dem Bridge-Entwurfs­muster gebildet. Er benötigt ein Behavior, das den Basis­iterator und die Filter­funktion angibt. Ein solches konkretes Behavior wird von der abstrakten Klasse FilterIteratorBehavior abgeleitet; diese enthält auch gleich die Factory-Methode iterator, um den so gebildeten Filter­iterator zu erzeugen.

Die hier angegebene Version verwendet Typ-Parameter.

Abstrakte Klasse FilterIteratorBehavior

Ein Behavior, das einen Filter­iterator erzeugt, wird von der abstrakten Klasse FilterIteratorBehavior abgeleitet. So ist sicher­gestellt, dass ein Basis­iterator und eine Filter­funktion vorhanden sind; außerdem steht die Factory-Methode iterator zur Verfügung.

public abstract class FilterIteratorBehavior<Type>
{
    /** the base iterator
     */
    public abstract Iterator<Type> baseIterator();

    /** the filter function
     */
    public abstract boolean pass(Type o);

    /** factory method that creates the filter iterator
     */
    public Iterator<Type> iterator()
    {
        return new FilterIterator<Type>(this);
    }

}

Klasse FilterIterator

Eine gewisse Schwierig­keit bei der Implementierung eines Filter­iterators entsteht dadurch, dass immer erst gesucht werden muss, ob noch ein Element vorhanden ist, das der Filter­bedingung genügt. Dies wird mit der Methode tryGetNext durchgeführt.

public class FilterIterator<Type> implements Iterator<Type>
{
    private FilterIteratorBehavior<Type> f;
    private boolean hasnext;
    private Iterator<Type> it;
    private Type x;

    public FilterIterator(FilterIteratorBehavior<Type> f_)
    {
        f=f_;
        hasnext=true;
        it=f.baseIterator();
        x=tryGetNext();
    }

    public boolean hasNext()
    {
        return hasnext;
    }

    public Type next()
    {
        Type y=x;
        x=tryGetNext();
        return y;
    }

    /** finds the next object that passes the filter
     */
    private Type tryGetNext()
    {
        Type y;
        while (it.hasNext())
        {
            y=it.next();
            if (f.pass(y))
                return y;
        }
        hasnext=false;
        return null;
    }

    public void remove()
    {
        // not implemented
    }

}

 

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

 

Weiter mit:  [Anwendung eines Filteriterators]   oder   up

 

homeH.W. Lang   Hochschule Flensburg   lang@hs-flensburg.de   Impressum   ©   Created: 05.02.2008   Updated: 20.06.2016
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