课程目标4:能的够从23种软件设计模式中选择恰当的软件设计模式对复杂的软件开发项目进行分析、设计、开发、测试和验证 题目:设计一个简单的咖啡店系统,需要支特下单、制作咖啡、送餐等功能。其中,咖啡分为浓缩咖啡、美式咖啡和拿铁咖啡, 每种咖啡可添不同口 味的糖浆、牛奶和奶泡。咖啡的成本根据咖啡类型和添加的配料不同而有所区别。请使用面向对象的思想,并使用适当的设计模式来实现该咖啡店系 统。请提供类的设计和相关的代码实现。(要求先说明采用了那些模式,再设计java代码,把代码复制发到答题框。)
时间: 2024-03-08 19:45:46 浏览: 15
本题可以采用以下设计模式:
1. 工厂模式:根据用户选择的咖啡类型和配料,生产相应的咖啡对象。
2. 装饰器模式:用于动态扩展咖啡对象的行为,比如添加糖浆、牛奶和奶泡等。
3. 策略模式:用于根据用户的选择计算咖啡的成本。
以下是Java代码实现:
```java
// 咖啡接口
public interface Coffee {
public double getCost();
public String getDescription();
}
// 浓缩咖啡类
public class Espresso implements Coffee {
private final String description;
public Espresso() {
description = "Espresso";
}
public double getCost() {
return 1.99;
}
public String getDescription() {
return description;
}
}
// 美式咖啡类
public class Americano implements Coffee {
private final String description;
public Americano() {
description = "Americano";
}
public double getCost() {
return 0.99;
}
public String getDescription() {
return description;
}
}
// 拿铁咖啡类
public class Latte implements Coffee {
private final String description;
public Latte() {
description = "Latte";
}
public double getCost() {
return 2.49;
}
public String getDescription() {
return description;
}
}
// 装饰器类
public abstract class Decorator implements Coffee {
protected Coffee coffee;
public Decorator(Coffee coffee) {
this.coffee = coffee;
}
public double getCost() {
return coffee.getCost();
}
public String getDescription() {
return coffee.getDescription();
}
}
// 糖浆装饰器类
public class SyrupDecorator extends Decorator {
private final String syrup;
public SyrupDecorator(Coffee coffee, String syrup) {
super(coffee);
this.syrup = syrup;
}
public double getCost() {
return super.getCost() + 0.5;
}
public String getDescription() {
return super.getDescription() + ", " + syrup + " syrup";
}
}
// 牛奶装饰器类
public class MilkDecorator extends Decorator {
private final String milk;
public MilkDecorator(Coffee coffee, String milk) {
super(coffee);
this.milk = milk;
}
public double getCost() {
return super.getCost() + 0.7;
}
public String getDescription() {
return super.getDescription() + ", " + milk + " milk";
}
}
// 奶泡装饰器类
public class FoamDecorator extends Decorator {
public FoamDecorator(Coffee coffee) {
super(coffee);
}
public double getCost() {
return super.getCost() + 0.3;
}
public String getDescription() {
return super.getDescription() + ", foam";
}
}
// 咖啡工厂类
public class CoffeeFactory {
public static Coffee createCoffee(String coffeeType) {
if (coffeeType.equals("espresso")) {
return new Espresso();
} else if (coffeeType.equals("americano")) {
return new Americano();
} else if (coffeeType.equals("latte")) {
return new Latte();
} else {
return null;
}
}
}
// 示例程序
public class CoffeeShop {
public static void main(String[] args) {
Coffee coffee = CoffeeFactory.createCoffee("latte");
coffee = new SyrupDecorator(coffee, "vanilla");
coffee = new MilkDecorator(coffee, "almond");
coffee = new FoamDecorator(coffee);
System.out.println(coffee.getDescription() + " costs $" + coffee.getCost());
}
}
```