当前位置: 首页 > 知识库问答 >
问题:

如何从对象中删除装饰器?

高修伟
2023-03-14
public abstract class Beverage {

    protected String Description; 

    public String getDescription(){
        return Description;
    }

    public abstract int cost();

}

public class Espresso extends Beverage{

    public int cost(){
        return 2;
    }
    public Espresso(){
        Description = "Espresso";
    }   
}


abstract class CondimentDecorator extends Beverage{

    public abstract String getDescription();


}

public class Mocha extends CondimentDecorator{

    Beverage beverage;
    public Mocha(Beverage beverage){
        this.beverage=beverage;
    }

    @Override
    public String getDescription() {
        return beverage.getDescription()+", Mocha ";
    }
    @Override
    public int cost() {
        return beverage.cost()+0.5;
    }   

    public Beverage remove(Beverage b) {
        return b;
    }

}
...

有更多像牛奶一样的装饰工..大豆..还有像室内混合咖啡一样的咖啡。等等。

Beverage beverage = new Mocha(new Espresso());
beverage = new Milk(beverage);

突然顾客想用鞭子代替摩卡。

共有1个答案

施永宁
2023-03-14

您必须自己提供这方面的逻辑,例如:

CondimentDecorator#removeCondiment(Class <? extends CondimentDecorator>)

让该方法检查它是否包装了该类的ConditmentDecorator,并直接引用包装好的饮料,绕过decorator进行删除。递归调用包装饮料它包装装饰不匹配。

 类似资料:
  • 假设我有一个雇员对象列表,每个雇员类都有雇员姓名、雇员地址、工资等属性。现在我必须删除名称为“John”和Salary的雇员对象 列表empList=new ArrayList 根据我的理解,若要解雇具有上述情况的员工,我应使用以下代码: 因此,基本上上述代码将从列表中删除所需的Employee对象。如果我的理解正确,请告诉我。 除此之外,请澄清以下几点:1.当我们有数百万条记录时,我们将如何解决

  • 问题内容: 说我创建一个对象,如下所示: 删除该属性以使其最终成为new 的最佳方法是什么? 问题答案: 像这样: 演示版

  • 问题内容: 我正在尝试从ArrayList中删除一个对象。每个Item对象都有3个属性;1. itemNum 2.信息3.费用。我也有3个类,即1。Item类定义了存储在目录中的单个项目。2. Catalog类维护Item对象的列表。3带main方法的客户端类。我在Set类中具有设置并获取,在Catalog中具有ArrayList。在客户端中,提示我“输入要删除的itemNum。如何基于对item

  • 问题内容: 我有一个包含一些对象的对象,例如,每个对象都有一个and 属性。如何从其中仅删除具有特定“名称” 的对象? 问题答案: 您可以使用如下形式:

  • 问题内容: 我做了一个具有更多关系的小型应用程序。现在,我想删除表格的详细信息,如何删除我没有删除任何想法。 关系如下: PanCard->员工(Ono To One) Employee-> ProjectManger(与员工的双向多对一关联) 项目-> ProjectManager(与项目的双向多对一关联) 现在我要删除一张一张的表数据 以下是我的POJO类代码: PanCard.java Em

  • 我有一个数组像 现在我要移除cartItem对象中的一个产品。我试过这个方法,但是更新后它也把原来的cartitem弄得一塌糊涂。 最后,原始的cartItem对象也没有显示任何东西。 我想要的是从products数组中移除一个产品,并发送回剩余的数组。