产品类:Meal抽象建造者类:MealBuilder具体建造者类:BeefBurgerMealBuilder、ChickenMealBuilder、ShrimpMealBuilder指挥者类:MealDirector
时间: 2024-08-05 21:00:24 浏览: 30
在这个设计模式示例中,你提到的是"工厂方法"(Factory Method)的一种变体,通常与"建造者"(Builder)模式结合,构成了"复合建造者"(Composite Builder)模式。这里涉及到的角色如下:
1. **产品类(Product)**: `Meal` 是一个抽象的产品,代表一顿餐,但不具体实现它的构建过程。
2. **抽象建造者类(Builder)**: `MealBuilder` 是一个抽象的建造者接口,用于构建 `Meal` 对象。具体到每个不同的肉类,如牛肉、鸡肉和虾,有各自的 `BeefBurgerMealBuilder`、`ChickenMealBuilder` 和 `ShrimpMealBuilder`。
3. **具体建造者类(Concrete Builder)**: `BeefBurgerMealBuilder`、`ChickenMealBuilder` 和 `ShrimpMealBuilder` 是具体的建造者类,它们分别负责构建不同类型的 `Meal`。例如,`BeefBurgerMealBuilder` 可能包含创建牛肉汉堡的特定步骤。
4. **指挥者类(Director)**: `MealDirector` 负责调用正确的建造者来创建 `Meal`,并控制整个构建过程。它并不关心具体的建造细节,只与 `MealBuilder` 接口交互。
**示例代码** (Python 不是工厂方法的典型实现语言,但为了说明概念,这里给出一个简化的 Java 示例,因为 Java 更适合描述这个设计模式):
```java
// 抽象产品类
public abstract class Meal {
// 建造者接口
public abstract void prepare();
// 具体方法
public abstract void cook();
}
// 抽象建造者
public interface MealBuilder {
void setMealType(MealType type);
void addTopping(Topping topping);
void prepare();
}
// 具体建造者 - 牛肉汉堡
public class BeefBurgerMealBuilder extends MealBuilder {
private Meal meal;
// 构造方法和方法实现省略...
}
// 指挥者类
public class MealDirector {
private MealBuilder builder;
public void buildMeal(MealType type) {
builder = MealBuilderFactory.createBuilder(type);
// 调用建造者的方法来创建和准备餐
builder.prepare();
builder.cook();
}
}
// 工厂方法
public class MealBuilderFactory {
public static MealBuilder createBuilder(MealType type) {
switch (type) {
case BEEF_BURGER:
return new BeefBurgerMealBuilder();
// 添加其他肉类类型的建造者...
}
throw new IllegalArgumentException("Unsupported meal type");
}
}
```