首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从Decorator Pattern中移除装饰对象?

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

Stack Overflow用户
提问于 2019-04-21 01:45:30
回答 1查看 318关注 0票数 0

如何删除使用装饰器设计模式添加的项?例如,比萨饼订购系统。我希望能够删除一些项目,并降低价格。

代码语言:javascript
复制
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;
    }
}
EN

回答 1

Stack Overflow用户

发布于 2019-04-21 03:17:41

这样做的一种可能方法是:

代码语言:javascript
复制
 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



}


}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55776160

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档