某咖啡店在卖咖啡时可以根据顾客的要求在其中加入各种配料,咖啡店会根据所加入的配料来计算总费用。咖啡所供应的咖啡及配料种类和价格表: 咖 啡 价格/杯(¥) 配料 价格/份(¥) 浓缩咖啡(Espresso) 25 摩卡(Mocha) 10 混合咖啡(House Blend) 30 奶泡(Whip) 8 重烘焙咖啡(Dark Roast) 20 牛奶(Milk) 6 现使用装饰模式为咖啡店设计一个程序以实现计算费用功能,输出每种饮料的详细描述及花费。要求用JAVA语言实现
时间: 2023-06-27 12:07:41 浏览: 101
以下是实现代码:
```java
// 咖啡类
abstract class Coffee {
String description = "Unknown Coffee";
public String getDescription() {
return description;
}
public abstract double cost();
}
// 浓缩咖啡类
class Espresso extends Coffee {
public Espresso() {
description = "Espresso";
}
public double cost() {
return 25.0;
}
}
// 混合咖啡类
class HouseBlend extends Coffee {
public HouseBlend() {
description = "House Blend Coffee";
}
public double cost() {
return 30.0;
}
}
// 重烘焙咖啡类
class DarkRoast extends Coffee {
public DarkRoast() {
description = "Dark Roast Coffee";
}
public double cost() {
return 20.0;
}
}
// 配料抽象类
abstract class CondimentDecorator extends Coffee {
public abstract String getDescription();
}
// 摩卡配料类
class Mocha extends CondimentDecorator {
Coffee coffee;
public Mocha(Coffee coffee) {
this.coffee = coffee;
}
public String getDescription() {
return coffee.getDescription() + ", Mocha";
}
public double cost() {
return coffee.cost() + 10.0;
}
}
// 奶泡配料类
class Whip extends CondimentDecorator {
Coffee coffee;
public Whip(Coffee coffee) {
this.coffee = coffee;
}
public String getDescription() {
return coffee.getDescription() + ", Whip";
}
public double cost() {
return coffee.cost() + 8.0;
}
}
// 牛奶配料类
class Milk extends CondimentDecorator {
Coffee coffee;
public Milk(Coffee coffee) {
this.coffee = coffee;
}
public String getDescription() {
return coffee.getDescription() + ", Milk";
}
public double cost() {
return coffee.cost() + 6.0;
}
}
// 测试类
public class Test {
public static void main(String[] args) {
// 订单1:浓缩咖啡加摩卡和奶泡
Coffee order1 = new Espresso();
order1 = new Mocha(order1);
order1 = new Whip(order1);
System.out.println(order1.getDescription() + " $" + order1.cost());
// 订单2:混合咖啡加牛奶和摩卡
Coffee order2 = new HouseBlend();
order2 = new Milk(order2);
order2 = new Mocha(order2);
System.out.println(order2.getDescription() + " $" + order2.cost());
}
}
```
输出结果:
```
Espresso, Mocha, Whip $43.0
House Blend Coffee, Milk, Mocha $46.0
```