homeSoftwaredesign Softwaredesign: Beispiel: Filter-Iterator mit Dekorierer Prof. Dr. Uwe Schmidt FH Wedel

Beispiel: Filter-Iterator mit Dekorierer

weiter

weiter

die Schnittstelle: Enumeration

// analog zu java.util.Enumeration definiert
 
public
interface Enumeration {
 
  public
  boolean hasMoreElements();
 
  public
  Object nextElement();
}
weiter

weiter

die Klasse: Intervall

// Enumeration fuer Intervalle
// lb <= i < ub
// als Beispiel fuer eine elementare Aufzaehlung
 
//--------------------
 
public
class Intervall implements Enumeration {
 
  private
  int iupperBound;
 
  //--------------------
 
  public
  Intervall(int lowerBound,
            int upperBound) {
    this.i          = lowerBound;
    this.upperBound = upperBound;
  }
 
  //--------------------
 
  public
  boolean hasMoreElements() {
    return
      i < upperBound;
  }
 
  //--------------------
 
  public
  Object nextElement() {
    if ( ! hasMoreElements() )
      throw
        new java.util.NoSuchElementException();
 
    return
      new Integer(i++);
  }
}
weiter

weiter

die Klasse: FilterEnumeration

// Enumeration fuer Intervalle
// lb <= i < ub
// als Beispiel fuer eine elementare Aufzaehlung
 
public
class FilterEnumeration implements Enumeration {
 
  private
  Enumeration e;
 
  private
  Predicate p;
 
  private
  Object next;
 
  private
  boolean more;
 
  //--------------------
 
  public
  FilterEnumeration(Enumeration ePredicate p) {
    this.e = e;
    this.p = p;
    advance();
  }
 
  //--------------------
 
  private
  void advance() {
    while ( ( more = e.hasMoreElements() )
            &&
            ! p.test(next = e.nextElement()) ) ;
  }
 
  //--------------------
 
  public
  boolean hasMoreElements() {
    return
      more;
  }
 
  //--------------------
 
  public
  Object nextElement() {
    if ( ! hasMoreElements() )
      throw
        new java.util.NoSuchElementException();
 
    Object res = next;
 
    advance();
 
    return
      res;
  }
}
weiter

weiter

die Schnittstelle: Predicate

// eine Schnittstelle fuer einstellige Praedikate
 
public
interface Predicate {
  public
  boolean test(Object o);
}
 
weiter

weiter

die Klasse: IsEven

public
class IsEven implements Predicate {
  public
  boolean test(Object o) {
    return
      ((Integer)o).intValue() % 2 == 0;
  }
}
weiter

weiter

die Klasse: IsPrime

public
class IsPrime implements Predicate {
 
  public
  boolean test(Object o) {
    return
      isPrime( ((Integer)o).intValue() );
  }
 
  //--------------------
 
  private
  boolean isPrime(int n) {
    return
      n > 1
      && 
      smallestDivisor(n) == n;
  }
 
  //--------------------
 
  private
  int smallestDivisor(int n) {
    int i = 2;
    while ( i * i <= n && n % i != 0 ) 
      ++i;
 
    return
      ( i * i <= n )
      ? i
      : n;
  }
}
weiter

weiter

ein Test: Test

public
class Test {
  public
  static
  void main(String [] args) {
    test(new Intervall(0,20));
    test(new FilterEnumeration(new Intervall(0,40),
                               new IsEven()));
    test(new FilterEnumeration(new Intervall(0,100),
                               new IsPrime()));
  }
 
  static
  void test(Enumeration i) {
    while ( i.hasMoreElements() ) {
      System.out.print(" " + i.nextElement());
    }
    System.out.println();
  }
}
weiter

weiter

Testlauf

java Test
weiter

Letzte Änderung: 04.07.2013
© Prof. Dr. Uwe Schmidt
Prof. Dr. Uwe Schmidt FH Wedel