需求:设计一个咖啡店点餐系统。 设计一个咖啡类(Coffee),并定义其两个子类(美式咖啡【AmericanCoffee】和拿铁咖啡 【LatteCoffee】);再设计一个咖啡店类(CoffeeStore),咖啡店具有点咖啡的功能。使用工厂方式模式来设计此案例。
时间: 2024-09-16 16:05:10 浏览: 32
需求描述得非常清晰,这里是一个简单的基于工厂模式的设计思路:
首先,我们可以创建一个`Coffee`类作为基础咖啡,它包含一些通用属性如咖啡名称、价格等,以及制作咖啡的方法。
```java
public abstract class Coffee {
private String name;
private double price;
// 构造函数、 getter 和 setter 略
public abstract void brew();
}
```
接下来,我们为`Coffee`类创建两个具体的子类,比如`AmericanCoffee`和`LatteCoffee`:
```java
public class AmericanCoffee extends Coffee {
// 添加美国咖啡特有的属性,例如是否加糖、奶等
private boolean isSugar;
@Override
public void brew() {
System.out.println("Brewing American coffee with sugar: " + (isSugar ? "Yes" : "No"));
}
}
public class LatteCoffee extends Coffee {
// 添加拿铁咖啡特有的属性,如浓缩咖啡、牛奶比例等
private double milkRatio;
@Override
public void brew() {
System.out.println("Brewing Latte coffee with " + milkRatio * 100 + "% milk.");
}
}
```
然后,我们需要设计一个`CoffeeStore`类,它有一个工厂方法来根据用户的需求生成特定类型的咖啡:
```java
public class CoffeeStore {
private static final Map<String, CoffeeFactory> factories = new HashMap<>();
static {
factories.put("American", () -> new AmericanCoffee());
factories.put("Latte", () -> new LatteCoffee());
}
public static Coffee orderCoffee(String type) {
CoffeeFactory factory = factories.get(type);
if (factory != null) {
return factory.create();
} else {
throw new IllegalArgumentException("Invalid coffee type: " + type);
}
}
}
```
这样,当客户通过`CoffeeStore.orderCoffee()`点单时,只需要传入咖啡类型(如"American"或"Latte"),工厂会返回对应子类的实例,并调用各自的brew方法制作咖啡。