Wpis z mikrobloga

Czy można połączyć wzorzec dekorator z (chyba)strategią? Projekt związany z pizzerią.
Pizza ma listę składników, które są obiektami implementującymi interfejs Addition, i chciałbym, abym mógł dekorować pizzę każdym składnikiem, czyli coś w stylu:
public class Ham implements Addition extends AdditionDecorator
Ma to sens?
#java #programowanie
  • 22
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@Philopolemus_Fronius:

Pizza pizza = new CheesePizza(list);
Pizza pizza = new Ham(pizza);

I z tego powinna wyjść pizza serowa z dodatkową szynką. I zastanawiam się, czy takie rozwiązanie jest dobre czy może coś za bardzo przekombinowuję.
  • Odpowiedz
zapis pizza = new Ham(pizza) jest okropnie mylący. Przekombinowujesz. lepiej by było
pizza.add(new Ham()). Skoro chcesz w ten sposób dodawać składniki to może jakiś Builder?
  • Odpowiedz
@Vengard:

Teraz jest błąd semantyczny.

Pizza pizza = new CheesePizza(); <- tworzysz zmienną typu pizza przechowującą obiekt typu CheesePizza. To jest ok
pizza = new Ham(pizza); <- nadpisujesz zawartość, więc CheesePizza jest usuwana a w jej miejsce wstawiany
  • Odpowiedz
@nilphilus: Ja bym to zrobił tak jak pisze @Kizio czyli jakiegoś buildera zastosował i np połączył z fabryką jak masz już jakieś predefiniowane pizze i byłoby coś w rodzaju

Pizza myPizza = PizzaFactory.createPizza(CHEESE_PIZZA).withToppings(new Ham(), new Mushrooms(), new Pepperoni());
  • Odpowiedz
Ogólnie przeczytałem książkę o wzorcach projektowych, i teraz staram się ją przerobić lepiej tworząc projekt, i używając ich w niej.
@Philopolemus_Fronius: klasa Ham miałaby raczej wygladać tak:
//AdditionDecorator dziedziczy z pizzy
public class Ham extends AdditionDecorator implements Addition {
Pizza pizza;
public Ham(Pizza pizza) { this.pizza =
  • Odpowiedz