How could I remove items that have been added using the decorator design pattern? For example Pizza Ordering System. I want to be able delete some items and decrease price.
public interface Pizza {
double getPrice();
}
public class SimplePizza implements Pizza {
@Override
public double getPrice() {
return 25;
}
}
public abstract class PizzaDecorator implements Pizza {
Pizza tempPizza;
public PizzaDecorator(Pizza a){
tempPizza = a;
}
@Override
public double getPrice(){
return tempPizza.getPrice();
}
}
public class Mushroom extends PizzaDecorator {
public Mushroom(Pizza newPizza){
super(newPizza);
}
public double getPrice(){
return tempPizza.getPrice() + 10;
}
}
One of the possible way to do like this:
interface Pizza {
double getPrice();
public abstract Pizza removeItem();
}
class SimplePizza implements Pizza {
@Override
public double getPrice() {
return 25;
}
@Override
public Pizza removeItem(){
return null;
}
}
abstract class PizzaDecorator implements Pizza {
Pizza tempPizza;
public PizzaDecorator(Pizza a){
tempPizza = a;
}
@Override
public double getPrice(){
return tempPizza.getPrice();
}
public abstract Pizza removeItem();
}
class Mushroom extends PizzaDecorator {
public Mushroom(Pizza newPizza){
super(newPizza);
}
public double getPrice(){
return tempPizza.getPrice()+10;
}
@Override
public Pizza removeItem(){
return tempPizza;
}
}
class Onion extends PizzaDecorator {
public Onion(Pizza newPizza){
super(newPizza);
}
public double getPrice(){
return tempPizza.getPrice()+20;
}
@Override
public Pizza removeItem(){
return tempPizza;
}
}
public class Main{
public static void main(String args[]){
Pizza pizza = new SimplePizza();
// create new FarmHouse pizza
Pizza pizza2 = new Mushroom(pizza);
System.out.println(pizza2.getPrice());//Prints 35.0
pizza2 = new Onion(pizza2);
System.out.println(pizza2.getPrice());////Prints 55.0
pizza2 = pizza2.removeItem();
System.out.println(pizza2.getPrice());//Print 35.0
}
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.