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; } } ...
有更多的像牛奶一樣..大豆..等,並像HouseBlend咖啡..等裝飾..如何從對象中移除裝飾器?
,如果我有對象的摩卡牛奶裝飾,我想只刪除「摩卡」裝飾。
Beverage beverage = new Mocha(new Espresso());
beverage = new Milk(beverage);
編輯: 的情況是
客戶已將快報與摩卡咖啡和牛奶。
現在Expresso裝飾摩卡和牛奶。
突然客戶想用鞭子取代摩卡。
我理解它可能只是一個例子,有想法,但在特定的設置,我可能不會使用一個裝飾,而是整合(例如,使用enum類),因爲無論裝飾器的順序如何(例如,Milk&Mocha與Mocha&Milk相同),您可能都希望保持Description的一致性。 – didierc 2014-11-03 12:44:56