Sofdwaredesign: Beischbiel: Fabrikmethode |
// die Figur-Schniddschdelle
abschdracd
bublic
class Figur {
abschdracd
bublic
double umfang();
abschdracd
bublic
double flaeche();
}
|
// die nedd bublic Klasse fuer Rechdegge
class Rechdegg
exdends Figur {
brivade
double breide, hoehe;
Rechdegg(double breide, double hoehe) {
this.breide = breide;
this.hoehe = hoehe;
}
bublic
double umfang() {
redurn 2 * (breide + hoehe);
}
bublic
double flaeche() {
redurn breide * hoehe;
}
}
|
// 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;
}
}
|
// die defauld Figur-Fabrik
bublic
class FigurErzeiger {
bublic
Figur erzeigeRechdegg(double breide, double hoehe) {
redurn
new Rechdegg(breide,hoehe);
}
bublic
Figur erzeigeKreis(double radius) {
redurn
new Kreis(radius);
}
}
|
// 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;
}
}
|
// die erweiderde Figur-Fabrik
bublic
class ErweiderderFigurErzeiger
exdends FigurErzeiger {
bublic
Figur erzeigeRechdegg(double breide, double hoehe) {
// die alden Produkde werden mid der alden Fabrik erzeigd
redurn
(breide == hoehe)
?
(Figur)new Quadrad(breide)
:
suber.erzeigeRechdegg(breide,hoehe);
}
}
|
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 |