标签:vat 使用场景 end item items ring ott bsp eve
假如我去麦当劳,麦当劳提供了多种多样的套餐供我选择,但是套餐组成无非就是汉堡、鸡翅、冷饮、薯条等这几种固定的东西,搭配不同就变成了不同的套餐,那么菜单的生成就可以使用建造者模式来进行
基础组件不变,组合逻辑多变的场景。
如:套餐搭配
菜单:类,把不同的对象组装起来,形成不同的套餐,应对不同的客户需求(套餐列表)
套餐属性:接口,定义套餐具体特征(套餐名字,包装方式,价格等)
套餐组成:抽象类,实现了套餐公有的属性方法(汉堡、饮料等广泛的内容)
套餐具体内容:类,具体的套餐组成(鸡腿汉堡,可乐等具体的内容)
包装:接口(定义包装的方法)
包装类型:类,实现包装接口(具体的包装方式)
/** * 套餐属性接口 */ public interface Item { public String name(); public Packing packing(); public float price(); }
/** * 包装接口,定义了包装产品的方法 */ public interface Packing { public String pack(); }
/** * 汉堡抽象类(继承了公有的方法) */ public abstract class Burger implements Item { @Override public Packing packing() { return new Wrapper(); } @Override public abstract float price(); }
/** * 冷饮抽象类(继承了公有的方法) */ public abstract class ColdDrink implements Item { @Override public Packing packing() { return new Bottle(); } @Override public abstract float price(); }
/** * 鸡肉汉堡类,汉堡类的具体实现 */ public class ChickenBurger extends Burger { @Override public float price() { return 50.5f; } @Override public String name() { return "Chicken Burger"; } }
/** * 素汉堡类,汉堡类的具体实现 */ public class VegBurger extends Burger { @Override public float price() { return 25.0f; } @Override public String name() { return "Veg Burger"; } }
/** * 可口可乐类,冷饮类的具体实现 */ public class Coke extends ColdDrink { @Override public float price() { return 30.0f; } @Override public String name() { return "Coke"; } }
/** * 百事可乐类,冷饮类的具体实现 */ public class Pepsi extends ColdDrink { @Override public float price() { return 35.0f; } @Override public String name() { return "Pepsi"; } }
/** * 瓶子包装 */ public class Bottle implements Packing { @Override public String pack() { return "Bottle"; } }
/** * 纸盒包装 */ public class Wrapper implements Packing { @Override public String pack() { return "Wrapper"; } }
/** * 套餐类 */ public class Meal { private List<Item> items = new ArrayList<Item>(); 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()); } } }
/** * 套餐生成类(菜单) */ public class MealBuilder { /** * 素食套餐 * * @return */ public Meal prepareVegMeal() { Meal meal = new Meal(); meal.addItem(new VegBurger()); meal.addItem(new Coke()); return meal; } /** * 肉食套餐 * * @return */ public Meal prepareNonVegMeal() { Meal meal = new Meal(); meal.addItem(new ChickenBurger()); meal.addItem(new Pepsi()); return meal; } }
标签:vat 使用场景 end item items ring ott bsp eve
原文地址:https://www.cnblogs.com/riches/p/11208655.html