C04 建造者 示例(三)

本文介绍了一种使用建造者模式设计KFC套餐的方法,通过将套餐的构建过程分解为多个步骤,实现了套餐组件的灵活组合。文章详细展示了建造者模式的类图及其实现代码,包括产品类、抽象建造者类、具体建造者类和指挥者类,最后通过客户端代码演示了如何使用配置文件来选择不同的套餐。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、类图

8195388-08b0be4b48a43082.jpg
04_建造者模式_KFC套餐.jpg

二、实例代码 - KFC套餐

  • 1/4_Product
package design.pattern.create.builder.kfc;

public class Meal {

    private String food;
    private String drink;

    public String getFood() {
        return food;
    }

    public void setFood(String food) {
        this.food = food;
    }

    public String getDrink() {
        return drink;
    }

    public void setDrink(String drink) {
        this.drink = drink;
    }

}
  • 2/4_Builder
package design.pattern.create.builder.kfc;

public abstract class MealBuilder {

    protected Meal meal = new Meal();

    public abstract void buildFood();

    public abstract void buildDrink();

    public Meal getMeal() {
        return meal;
    }

}
  • 3/4_ConcreteBuilder
package design.pattern.create.builder.kfc;

public class SubMealBuilderA extends MealBuilder {

    @Override
    public void buildFood() {
        meal.setFood("一个鸡堡");
    }

    @Override
    public void buildDrink() {
        meal.setDrink("一杯可乐");
    }

}
package design.pattern.create.builder.kfc;

public class SubMealBuilderB extends MealBuilder {

    @Override
    public void buildFood() {
        meal.setFood("一个鸡肉卷");
    }

    @Override
    public void buildDrink() {
        meal.setDrink("一杯果汁");
    }

}
  • 4/4_Director
package design.pattern.create.builder.kfc;

public class KFCWaiter {

    private MealBuilder mealBuilder;

    public void setMealBuilder(MealBuilder mealBuilder) {
        this.mealBuilder = mealBuilder;
    }

    public Meal construct() {
        mealBuilder.buildFood();
        mealBuilder.buildDrink();
        return mealBuilder.getMeal();
    }

}
  • 配置文件
<?xml version = "1.0"?>
<config>
    <classPath>design.pattern.create.builder.kfc.</classPath>
    <className>SubMealBuilderB</className>
</config>
  • Client
package design.pattern.create.builder.kfc;

import design.pattern.util.XmlUtil;

public class Client {

    public static void main(String[] args) {
        String CONFIG_FILE = "design/pattern/create/builder/kfc/z_config.xml";

        try {
            MealBuilder mb = (MealBuilder)XmlUtil.getBean(CONFIG_FILE);
            KFCWaiter waiter = new KFCWaiter();
            waiter.setMealBuilder(mb);
            Meal meal = waiter.construct();

            System.out.println("套餐组成:");
            System.out.println(meal.getFood());
            System.out.println(meal.getDrink());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

输出

套餐组成:
一个鸡肉卷
一杯果汁
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值