Java 如何从对象中移除装饰器?

Java 如何从对象中移除装饰器?,java,linked-list,decorator,Java,Linked List,Decorator,编辑: 情况是 客户在Expresso中添加了摩卡和牛奶 现在,Expresso用摩卡咖啡和牛奶装饰 突然,顾客想用鞭子代替摩卡咖啡 你必须自己提供逻辑,比如: Beverage beverage = new Mocha(new Espresso()); beverage = new Milk(beverage); conditiondecorator#除去condition(Class而不编写自定义的装饰器来处理这个问题,你不能。你不需要除去装饰器,只需要重新创建饮料减去Mocha装饰器即可

编辑: 情况是

  • 客户在Expresso中添加了摩卡和牛奶

  • 现在,Expresso用摩卡咖啡和牛奶装饰

  • 突然,顾客想用鞭子代替摩卡咖啡


  • 你必须自己提供逻辑,比如:

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

    conditiondecorator#除去condition(Class而不编写自定义的装饰器来处理这个问题,你不能。你不需要除去装饰器,只需要重新创建饮料减去
    Mocha
    装饰器即可

    CondimentDecorator#removeCondiment(Class <? extends CondimentDecorator>)
    

    我理解这可能只是一个示例,但在特定的设置中,我可能不会使用装饰器,而是直接在类中集成装饰(例如,使用enum类),因为您可能希望保持描述的一致性,而不考虑装饰器的顺序(例如,Milk&Mocha与Mocha&Milk相同)。
    CondimentDecorator#removeCondiment(Class <? extends CondimentDecorator>)
    
    beverage = new Milk(new Espresso());