用模板模式实现制作面包
时间: 2024-01-14 10:07:23 浏览: 28
好的,下面是用模板模式实现制作面包的示例代码:
```java
// 面包制作模板类
public abstract class BreadTemplate {
// 制作面包的模板方法
public final void makeBread() {
prepareIngredients(); // 准备材料
kneadDough(); // 揉面团
ferment(); // 发酵
bake(); // 烘焙
if (addCondiments()) { // 添加调料
addToppings(); // 添加配料
}
serve(); // 上菜
}
// 准备材料
protected abstract void prepareIngredients();
// 揉面团
protected abstract void kneadDough();
// 发酵
protected abstract void ferment();
// 烘焙
protected abstract void bake();
// 添加调料
protected boolean addCondiments() {
return true; // 默认添加调料
}
// 添加配料
protected abstract void addToppings();
// 上菜
protected abstract void serve();
}
// 白面包类
public class WhiteBread extends BreadTemplate {
@Override
protected void prepareIngredients() {
System.out.println("准备面粉、酵母、盐和水");
}
@Override
protected void kneadDough() {
System.out.println("揉面团");
}
@Override
protected void ferment() {
System.out.println("发酵");
}
@Override
protected void bake() {
System.out.println("烘焙25分钟");
}
@Override
protected void addToppings() {
// 白面包不添加配料
}
@Override
protected void serve() {
System.out.println("上菜,享用美味的白面包");
}
}
// 全麦面包类
public class WholeWheatBread extends BreadTemplate {
@Override
protected void prepareIngredients() {
System.out.println("准备全麦面粉、酵母、盐和水");
}
@Override
protected void kneadDough() {
System.out.println("揉面团");
}
@Override
protected void ferment() {
System.out.println("发酵");
}
@Override
protected void bake() {
System.out.println("烘焙30分钟");
}
@Override
protected boolean addCondiments() {
return false; // 全麦面包不添加调料
}
@Override
protected void addToppings() {
System.out.println("添加芝士和蔬菜");
}
@Override
protected void serve() {
System.out.println("上菜,享用美味的全麦面包");
}
}
// 测试代码
public class Test {
public static void main(String[] args) {
BreadTemplate bread1 = new WhiteBread();
bread1.makeBread();
BreadTemplate bread2 = new WholeWheatBread();
bread2.makeBread();
}
}
```
在这个示例中,我们定义了一个`BreadTemplate`类,其中包含了制作面包的模板方法`makeBread()`和一些抽象方法,如`prepareIngredients()`、`kneadDough()`等。然后,我们创建了两个具体的面包类`WhiteBread`和`WholeWheatBread`,它们继承了`BreadTemplate`类并实现了抽象方法。最后,在测试代码中,我们分别创建了一个白面包对象和一个全麦面包对象,并调用它们的`makeBread()`方法来制作面包。由于模板方法中的步骤是固定的,因此我们可以在不同的具体面包类中重写部分方法,以实现不同的制作方式。