homeSoftwaredesign Softwaredesign: Beispiel: Fabrikmethode Prof. Dr. Uwe Schmidt FH Wedel

Beispiel: Fabrikmethode

weiter

weiter

die abstrakte Klasse für das Produkt: Figur

// die Figur-Schnittstelle
 
abstract
public
class Figur {
 
  abstract
  public
  double umfang();
 
 
  abstract
  public
  double flaeche();
}
 
weiter

weiter

ein konkretes Produkt: Rechteck

// die nicht public Klasse fuer Rechtecke
 
class Rechteck
  extends Figur {
 
    private
    double breitehoehe;
 
    Rechteck(double breitedouble hoehe) {
      this.breite = breite;
      this.hoehe   = hoehe;
    }
 
    public
    double umfang() {
      return 2 * (breite + hoehe);
    }
 
    public
    double flaeche() {
      return breite * hoehe;
    }
}
 
weiter

weiter

ein weiteres konkretes Produkt: Kreis

// die nicht public Klasse fuer Kreise
 
class Kreis
  extends Figur {
 
    private
    double radius;
 
    Kreis(double radius) {
      this.radius = radius;
    }
 
    public
    double umfang() {
      return 2 * Math.PI * radius;
    }
 
    public
    double flaeche() {
      return Math.PI * radius * radius;
    }
}
weiter

weiter

die Fabrik mit default-Fabrikmethoden: FigurErzeuger

// die default Figur-Fabrik
 
public
class FigurErzeuger {
 
  public
  Figur erzeugeRechteck(double breitedouble hoehe) {
    return
      new Rechteck(breite,hoehe);
  }
 
  public
  Figur erzeugeKreis(double radius) {
    return
      new Kreis(radius);
  }
}
 
weiter

weiter

ein neues eigenes Produkt: Quadrat

// die Erweiterung fuer
// die Sonderbehandlung von Quadraten
// Quadrat erbt nicht von Rechteck !!!
 
class Quadrat
  extends Figur {
 
    private
    double breite;
 
    Quadrat(double breite) {
      this.breite = breite;
    }
 
    public
    double umfang() {
      return 4 * breite;
    }
 
    public
    double flaeche() {
      return breite * breite;
    }
}
 
weiter

weiter

eine neue Fabrik: ErweiterterFigurErzeuger

// die erweiterte Figur-Fabrik
 
public
class ErweiterterFigurErzeuger
  extends FigurErzeuger {
 
  public
  Figur erzeugeRechteck(double breitedouble hoehe) {
 
      // die alten Produkte werden mit der alten Fabrik erzeugt
 
      return
          (breite == hoehe)
          ?
          (Figur)new Quadrat(breite)
          :
          super.erzeugeRechteck(breite,hoehe);
  }
}
 
weiter

weiter

ein Klient: Klient1

public
class Klient1 {
 
  static
  FigurErzeuger f;
 
  public
  static
  void main(String [] argv) {
 
    if (argv[0] == "xxx") {
      f = new ErweiterterFigurErzeuger();
    } else {
      f = new FigurErzeuger();
    }
 
    Figur q = f.erzeugeRechteck(1.0,1.0);
  }
}

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