[Dekorator] klasa

0

Mam problem ze wzorcem dekoratora, konkretnie z dekoratorem który działa na zasadzie że np. jeśli mamy kawiarnię to tworzymy osobną klasę dla każdego komponentu tworzącego kawę klasę o strukturze:

class Espresso extends Decorator {
private float cost = 0.75f;
private String description = " espresso";
public Espresso(DrinkComponent component) {
super(component);
}
public float getTotalCost() {
return component.getTotalCost() + cost;
}
public String getDescription() {
return component.getDescription() +
description;
}
}

Następnie musi być klasa która scali wszystkie komponenty (tutaj kubek)

class Mug implements DrinkComponent {
public String getDescription() {
return "mug";
}
public float getTotalCost() {
return 0;
}
}

Klasa decorator wygląda następująco:

abstract class Decorator implements DrinkComponent
{
protected DrinkComponent component;
Decorator(DrinkComponent component) {
this.component = component;
}
public float getTotalCost() {
return component.getTotalCost();
}
public abstract String getDescription();
}

Teraz przykładowa mocha (espresso+spienione mleko+czekolada....)

DrinkComponent cafeMocha = new Espresso(
new SteamedMilk(new Chocolate(new Whipped(
new Decaf(new Mug())))));
System.out.println(cafeMocha.getDescription().
trim() + ": $" + cafeMocha.getTotalCost());

Teraz przejdę do problemu. Stworzyłem interfejs z checkboxami które zaznacza sobie np. klient wybiera poszczególne elementy jego kawy, na przykład ktoś sobie wybierze espresso z mlekiem i cukrem, potem klika button zamów i... jak uzyskać efekt: DrinkComponent custom = new Espresso(new SteamedMilk(new sugar(new Mug())));
Na pewno nie można stworzyć if dla każdego możliwego przypadku (za dużo kodu), kombinowałem z classForName ale nie udało się. Czy ktoś ma jakiś pomysł?

0

klasa CafeCreator z metoda:

public static DrinkComponent addSugar(DrinkComponent c) {
  return new Sugar(c);
} 

i innymi, analogicznymi.

0

Super, wielkie dzięki, działa jak należy

1 użytkowników online, w tym zalogowanych: 0, gości: 1