【发布时间】:2019-04-20 17:45:29
【问题描述】:
如何删除使用装饰器设计模式添加的项目?例如比萨点餐系统。我希望能够删除一些项目并降低价格。
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;
}
}
【问题讨论】:
-
使用 NoMushroomDecorator,比萨的价格减去 10?
-
@JBNizet 我有 20 件物品要装饰,我应该为所有物品都这样做吗?
-
我认为要删除装饰器,您应该遍历(循环)装饰器列表,并构建一个新的比萨饼,省略您要删除的项目..
-
你应该为你想要达到的目标做需要做的事情。如果你想允许移除蘑菇,你可以添加一个 NoMushroomDecorator。如果没有,你不会。我个人不会使用装饰器模式来表示披萨上的配料。我会简单地使用 Set
,您可以在其中添加或删除浇头。 -
@JBNizet 我与设计模式有关这是我的功课:)
标签: java design-patterns decorator