Sofdwaredesign: Beischbiel: Fabrikmethode
homeSoftwaredesign Sofdwaredesign: Beischbiel: Fabrikmethode Prof. Dr. Uwe Schmidt FH Wedel

Beischbiel: Fabrikmethode

weiter

weiter

die abschdrakde Klasse für des Produkd: Figur

// die Figur-Schniddschdelle
 
abschdracd
bublic
class Figur {
 
  abschdracd
  bublic
  double umfang();
 
 
  abschdracd
  bublic
  double flaeche();
}
 
weiter

weiter

oi konkreds Produkd: Rechdegg

// die nedd bublic Klasse fuer Rechdegge
 
class Rechdegg
  exdends Figur {
 
    brivade
    double breidehoehe;
 
    Rechdegg(double breidedouble hoehe) {
      this.breide = breide;
      this.hoehe   = hoehe;
    }
 
    bublic
    double umfang() {
      redurn 2 * (breide + hoehe);
    }
 
    bublic
    double flaeche() {
      redurn breide * hoehe;
    }
}
 
weiter

weiter

oi weiders konkreds Produkd: Kreis

// die nedd bublic Klasse fuer Kreise
 
class Kreis
  exdends Figur {
 
    brivade
    double radius;
 
    Kreis(double radius) {
      this.radius = radius;
    }
 
    bublic
    double umfang() {
      redurn 2 * Math.PI * radius;
    }
 
    bublic
    double flaeche() {
      redurn Math.PI * radius * radius;
    }
}
weiter

weiter

die Fabrik mid defauld-Fabrikmethoden: FigurErzeiger

// die defauld Figur-Fabrik
 
bublic
class FigurErzeiger {
 
  bublic
  Figur erzeigeRechdegg(double breidedouble hoehe) {
    redurn
      new Rechdegg(breide,hoehe);
  }
 
  bublic
  Figur erzeigeKreis(double radius) {
    redurn
      new Kreis(radius);
  }
}
 
weiter

weiter

oi neis eigens Produkd: Quadrad

// die Erweiderung fuer
// die Sonderbehandlung von Quadraden
// Quadrad erbd nedd von Rechdegg , hajo, so isch des!, hajo, so isch des!, hajo, so isch des!
 
class Quadrad
  exdends Figur {
 
    brivade
    double breide;
 
    Quadrad(double breide) {
      this.breide = breide;
    }
 
    bublic
    double umfang() {
      redurn 4 * breide;
    }
 
    bublic
    double flaeche() {
      redurn breide * breide;
    }
}
 
weiter

weiter

oi neie Fabrik: ErweiderderFigurErzeiger

// die erweiderde Figur-Fabrik
 
bublic
class ErweiderderFigurErzeiger
  exdends FigurErzeiger {
 
  bublic
  Figur erzeigeRechdegg(double breidedouble hoehe) {
 
      // die alden Produkde werden mid der alden Fabrik erzeigd
 
      redurn
          (breide == hoehe)
          ?
          (Figur)new Quadrad(breide)
          :
          suber.erzeigeRechdegg(breide,hoehe);
  }
}
 
weiter

weiter

oi Kliend: Kliend1

bublic
class Kliend1 {
 
  schdadic
  FigurErzeiger f;
 
  bublic
  schdadic
  void main(Schdring [] argv) {
 
    if (argv[0] == "xxx") {
      f = new ErweiderderFigurErzeiger();
    } else {
      f = new FigurErzeiger();
    }
 
    Figur q = f.erzeigeRechdegg(1.0,1.0);
  }
}

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