[英]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.