酷代码 AI
菜单
服务商

建造者模式练习 3、kfc套餐 建造者模式可以用于描述kfc 如何创建套餐: 套餐是一个复杂对象,它一般包含主食(如汉堡、鸡肉卷等)和饮料(如果汁、可乐等)等组成部分, 不同的套餐有不同的组成部分,而kfc的服务员可以根据顾客的要求,一步一步装配这些组成部分,构造一份完整的套餐,然后返回给顾客。

建造者模式是一种设计模式,用于将一个复杂的对象构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。这种模式非常适合于对象的创建步骤较多且复杂的情况,比如KFC的套餐构建。 下面通过一个简单的例子来展示如何使用建造者模式来构建KFC的套餐。 1. 定义产品类(套餐) 首先,定义一个`Meal`类,这个类代表一个套餐,其中包含多个组成部分,如主食和饮料。 ```java public class Meal { private List<Item> items = new ArrayList<>(); public void addItem(Item item) { items.add(item); } public float getCost() { float cost = 0.0f; for (Item item : items) { cost += item.price(); } return cost; } public void showItems() { for (Item item : items) { System.out.print("Item : " + item.name()); System.out.print(", Packing : " + item.packing().pack()); System.out.println(", Price : " + item.price()); } } } ``` 2. 定义抽象构建者 接下来,定义一个抽象的`MealBuilder`类,它声明了构建套餐所需的各个方法。 ```java public abstract class MealBuilder { protected Meal meal; public MealBuilder() { this.meal = new Meal(); } public abstract void buildBurger(); public abstract void buildDrink(); public abstract void buildSnack(); public Meal getMeal() { return meal; } } ``` 3. 实现具体构建者 为不同的套餐实现具体的构建者。例如,为儿童套餐和成人套餐分别创建两个具体的构建者。 儿童套餐构建者 ```java public class KidsMealBuilder extends MealBuilder { @Override public void buildBurger() { meal.addItem(new ChickenBurger()); } @Override public void buildDrink() { meal.addItem(new Coke()); } @Override public void buildSnack() { meal.addItem(new FrenchFries()); } } ``` 成人套餐构建者 ```java public class AdultMealBuilder extends MealBuilder { @Override public void buildBurger() { meal.addItem(new VegBurger()); } @Override public void buildDrink() { meal.addItem(new Pepsi()); } @Override public void buildSnack() { meal.addItem(new OnionRings()); } } ``` 4. 定义导演类 导演类负责调用构建者的各个方法来构建具体的套餐。 ```java public class Waiter { private MealBuilder mealBuilder; public void setMealBuilder(MealBuilder mb) { this.mealBuilder = mb; } public Meal getMeal() { return mealBuilder.getMeal(); } public void constructMeal() { mealBuilder.buildBurger(); mealBuilder.buildDrink(); mealBuilder.buildSnack(); } } ``` 5. 定义产品部件 定义具体的食品和饮料类,这些是套餐的组成部分。 ```java public interface Item { String name(); Packing packing(); float price(); } public interface Packing { String pack(); } public class Wrapper implements Packing { @Override public String pack() { return "Wrapper"; } } public class Bottle implements Packing { @Override public String pack() { return "Bottle"; } } public class VegBurger implements Item { @Override public String name() { return "Veg Burger"; } @Override public Packing packing() { return new Wrapper(); } @Override public float price() { return 50.0f; } } public class ChickenBurger implements Item { @Override public String name() { return "Chicken Burger"; } @Override public Packing packing() { return new Wrapper(); } @Override public float price() { return 60.0f; } } public class Coke implements Item { @Override public String name() { return "Coke"; } @Override public Packing packing() { return new Bottle(); } @Override public float price() { return 30.0f; } } public class Pepsi implements Item { @Override public String name() { return "Pepsi"; } @Override public Packing packing() { return new Bottle(); } @Override public float price() { return 35.0f; } } public class FrenchFries implements Item { @Override public String name() { return "French Fries"; } @Override public Packing packing() { return new Wrapper(); } @Override public float price() { return 20.0f; } } public class OnionRings implements Item { @Override public String name() { return "Onion Rings"; } @Override public Packing packing() { return new Wrapper(); } @Override public float price() { return 25.0f; } } ``` 6. 使用示例 我们可以通过以下代码来演示如何使用上述类来构建不同类型的套餐。 ```java public class KFCMealBuilderDemo { public static void main(String[] args) { Waiter waiter = new Waiter(); MealBuilder kidsMealBuilder = new KidsMealBuilder(); waiter.setMealBuilder(kidsMealBuilder); waiter.constructMeal(); Meal kidsMeal = waiter.getMeal(); kidsMeal.showItems(); System.out.println("Total Cost: " + kidsMeal.getCost()); MealBuilder adultMealBuilder = new AdultMealBuilder(); waiter.setMealBuilder(adultMealBuilder); waiter.constructMeal(); Meal adultMeal = waiter.getMeal(); adultMeal.showItems(); System.out.println("Total Cost: " + adultMeal.getCost()); } } ``` 这段代码展示了如何使用建造者模式来构建不同类型的KFC套餐,并打印出每个套餐的详细信息及其总价格。 [2024-10-24 16:59:34 | AI写代码神器 | 1350点数解答]

相关提问
实用工具查看更多
今日油价 [生活类]
图片互转base64 [开发类]
时间转换器 [开发类]
数独游戏 [娱乐类]
经典推箱子 [娱乐类]
AI摸鱼五子棋 [娱乐类]