我在学习使用Decorator模式的过程中,我遇到了,我估计是简单的一个问题,但我似乎无法找到答案的一个装饰类型。 假设我有一个抽象的饮料类。然后,假设我有几个延伸饮料的具体组件:americano,espresso,latte等。还有一个抽象的调味品类扩展了饮料。调味品类然后有多个小类:牛奶,糖,大豆,鞭子。每个调味品子类都有一个分别从Beverage和Condiments继承的cost和getdescription()方法。我的问题是,在测试时,如何阻止某个具有多种同类型调味品的饮料实例,即美国大豆只有一次收取大豆的费用,即使大豆在测试课程中被陈述了两次。我知道我可以将调味品保存到列表中,并在添加新调味品时检查是否存在调味品,我只想看看是否有更好的选择。装饰方法,在Java
饮料类
public abstract class Beverage {
String description = "Unknown Beverage";
public String getDescription() {
return description;
}
public abstract double cost();
}
调味品装饰
public abstract class CondimentDecorator extends Beverage {
public abstract String getDescription();
}
在DarkRoast类
public class DarkRoast extends Beverage {
public DarkRoast() {
description = "Dark Roast Coffee";
}
public double cost() {
return .99;
}
}
大豆类
public class Soy extends CondimentDecorator {
Beverage beverage;
public Soy(Beverage beverage) {
this.beverage = beverage;
}
public String getDescription() {
return beverage.getDescription() + ", Soy";
}
public double cost() {
return .15 + beverage.cost();
}
}
如果有人能够帮助,甚至指向我一篇好文章或教程,我将不胜感激。
你正在为修饰器(至少修改cost())的一种[idempotence](https://en.wikipedia.org/wiki/Idempotence)。 – Fuhrmanator