Hallo,
ich beschäftige mich gerade mit dem Decorator-Designpattern.
Dazu hab ich mir ne kleine Anwendung geschrieben.
Das Beispiel gibts auch im Netz.
//Das Food-Interface
//Eine konkrete Implementation von Food
//Der abstrakte Decorator
//ein konkreter Decorator
//Die main
Das klappt soweit ganz gut.
Ausgabe:
Soweit so gut.
Jetzt hätte ich aber auch gerne die Temperatur des Schnitzels ausgegeben.
Dazu müsste ich ja die "getTemperature()"-Methode von Schnitzel ebenfalls im Interface definieren.
Das hätte aber zur Folge das jeder konkrete Decorator, also auch Kartoffeln, diese Methode implementieren muss, obwohl dass keinen Sinn macht.
Gibt es eine Möglichkeit direkt auf die Methoden der Basisklasse zuzugreifen um eben z.B. die Temperatur zu erfahren, oder aber auch Variablen der Basisklasse zu verändern (erwaermen), oder ist dieses Pattern an der Stelle ungeeignet?
ich beschäftige mich gerade mit dem Decorator-Designpattern.
Dazu hab ich mir ne kleine Anwendung geschrieben.
Das Beispiel gibts auch im Netz.
//Das Food-Interface
Java:
public interface Food {
public String getDescription();
public double getPrize();
}
//Eine konkrete Implementation von Food
Java:
public class Schnitzel implements Food {
private double temperature = 20;
public String getDescription() {
return "Schnitzel";
}
public double getPrize() {
return 10.50;
}
public double getTemperature()
{
return temperature;
}
public double erwaermen(double newTemp)
{
temperature = newTemp;
}
}
//Der abstrakte Decorator
Java:
public abstract class FoodDecorator implements Food {
final Food food;
public FoodDecorator(Food food) {
this.food = food;
}
}
//ein konkreter Decorator
Java:
public class Kartoffeln extends FoodDecorator{
public Kartoffeln(Food food) {
super(food);
}
public String getDescription() {
return food.getDescription() + " und Kartoffeln";
}
public double getPrize() {
return food.getPrize() + 1.50;
}
}
//Die main
Java:
public static void main(String[] args) {
Food dinner = new Schnitzel();
dinner = new Kartoffeln(dinner);
System.out.println(dinner.getDescription());
System.out.println("Preis: "+dinner.getPrize()+"€");
}
Das klappt soweit ganz gut.
Ausgabe:
Code:
Schnitzel und Kartoffeln
Code:
Preis: 12.0€
Soweit so gut.
Jetzt hätte ich aber auch gerne die Temperatur des Schnitzels ausgegeben.
Dazu müsste ich ja die "getTemperature()"-Methode von Schnitzel ebenfalls im Interface definieren.
Das hätte aber zur Folge das jeder konkrete Decorator, also auch Kartoffeln, diese Methode implementieren muss, obwohl dass keinen Sinn macht.
Gibt es eine Möglichkeit direkt auf die Methoden der Basisklasse zuzugreifen um eben z.B. die Temperatur zu erfahren, oder aber auch Variablen der Basisklasse zu verändern (erwaermen), oder ist dieses Pattern an der Stelle ungeeignet?