简体   繁体   English

如何从Decorator Pattern中删除装饰对象?

[英]How to remove decorated object from Decorator Pattern?

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



}


}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM