Softwaredesign: Beispiel: Fabrikmethode |
// die Figur-Schnittstelle
abstract
public
class Figur {
abstract
public
double umfang();
abstract
public
double flaeche();
}
|
// die nicht public Klasse fuer Rechtecke
class Rechteck
extends Figur {
private
double breite, hoehe;
Rechteck(double breite, double hoehe) {
this.breite = breite;
this.hoehe = hoehe;
}
public
double umfang() {
return 2 * (breite + hoehe);
}
public
double flaeche() {
return breite * hoehe;
}
}
|
// 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;
}
}
|
// die default Figur-Fabrik
public
class FigurErzeuger {
public
Figur erzeugeRechteck(double breite, double hoehe) {
return
new Rechteck(breite,hoehe);
}
public
Figur erzeugeKreis(double radius) {
return
new Kreis(radius);
}
}
|
// 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;
}
}
|
// die erweiterte Figur-Fabrik
public
class ErweiterterFigurErzeuger
extends FigurErzeuger {
public
Figur erzeugeRechteck(double breite, double hoehe) {
// die alten Produkte werden mit der alten Fabrik erzeugt
return
(breite == hoehe)
?
(Figur)new Quadrat(breite)
:
super.erzeugeRechteck(breite,hoehe);
}
}
|
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 |