创建型设计模式建造者模式
Posted riches
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了创建型设计模式建造者模式相关的知识,希望对你有一定的参考价值。
一、一句话背景
假如我去麦当劳,麦当劳提供了多种多样的套餐供我选择,但是套餐组成无非就是汉堡、鸡翅、冷饮、薯条等这几种固定的东西,搭配不同就变成了不同的套餐,那么菜单的生成就可以使用建造者模式来进行
二、使用场景
基础组件不变,组合逻辑多变的场景。
如:套餐搭配
三、模型分析
菜单:类,把不同的对象组装起来,形成不同的套餐,应对不同的客户需求(套餐列表)
套餐属性:接口,定义套餐具体特征(套餐名字,包装方式,价格等)
套餐组成:抽象类,实现了套餐公有的属性方法(汉堡、饮料等广泛的内容)
套餐具体内容:类,具体的套餐组成(鸡腿汉堡,可乐等具体的内容)
包装:接口(定义包装的方法)
包装类型:类,实现包装接口(具体的包装方式)
四、代码分析
套餐属性
/** * 套餐属性接口 */ 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;
以上是关于创建型设计模式建造者模式的主要内容,如果未能解决你的问题,请参考以下文章