建造者模式(Builder Pattern): 在线订单系统实战案例分析

在构建一个在线订餐平台时,我们需要处理各种不同的订单项,包括不同类型的菜品、饮料以及可能的特别要求。订单构建过程需要灵活地适应不同的定制选项。

2. 为什么要使用建造者模式

建造者模式允许用户通过一系列步骤来定制订单,同时保持代码的清晰和组织性。这使得添加新的订单项或定制选项变得更加容易。

3. 标准建造者模式图

4. 业务建造者模式图

5. 业务代码参考

java 复制代码
    // 订单项接口
    interface OrderItem {
        void prepare();
    }

    // 具体订单项实现
    class Meal implements OrderItem {
        private String dishType;
        private int quantity;
        private List<String> toppings;

        // Constructor, getters and setters
        public void prepare() {
            // 准备餐点逻辑
        }
    }

    class Beverage implements OrderItem {
        private String drinkType;
        private String size;
        private boolean ice;

        // Constructor, getters and setters
        public void prepare() {
            // 准备饮料逻辑
        }
    }

    // 订单建造者
    class OrderBuilder {
        private List<OrderItem> orderItems = new ArrayList<>();
        private String deliveryTime;

        public OrderBuilder addOrderItem(OrderItem item) {
            orderItems.add(item);
            return this;
        }

        public OrderBuilder setDeliveryTime(String time) {
            this.deliveryTime = time;
            return this;
        }

        public Order build() {
            Order order = new Order();
            order.setOrderItems(orderItems);
            order.setDeliveryTime(deliveryTime);
            return order;
        }
    }

    // 订单类
    class Order {
        private List<OrderItem> orderItems;
        private String deliveryTime;

        // Constructor, getters and setters

        // 准备订单中的所有项
        public void prepareOrder() {
            for (OrderItem item : orderItems) {
                item.prepare();
            }
        }
    }

    // 客户端使用建造者模式构建订单
    public class OrderSystem {
        public static void main(String[] args) {
            Order order = new OrderBuilder()
                    .addOrderItem(new MealBuilder()
                            .setDishType("牛肉面")
                            .setQuantity(2)
                            .addTopping("香菜")
                            .build())
                    .addOrderItem(new BeverageBuilder()
                            .setDrinkType("可乐")
                            .setSize("大杯")
                            .addIce(true)
                            .build())
                    .setDeliveryTime("12:00")
                    .build();

            order.prepareOrder();
        }
    }

6. 使用建造者模式的好处

建造者模式将订单的构建过程封装起来,使得构建复杂对象(如包含多个订单项的订单)变得更加灵活和易于管理。它的好处包括:

  • 灵活性:可以很容易地添加新的订单项或定制选项。
  • 解耦:客户端代码不需要知道订单项的具体构建细节。
  • 可维护性:集中管理订单的构建逻辑,便于维护和扩展。

7. 其他使用建造者模式场景参考

建造者模式适用于需要构建具有多个可选配置的复杂对象的任何场景,例如:

  • 用户配置文件:允许用户设置不同的偏好设置。
  • 复杂的查询构建器:在数据库操作中构建复杂的查询。

8. 可参考开源框架

  • Apache Commons Builder:提供了一系列方便的建造者类,用于创建复杂对象。

总结

建造者模式为构建复杂对象提供了一种清晰和灵活的方法,使得代码易于理解和维护,同时支持对象构建过程的扩展。

相关推荐
子兮曰5 天前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
小羊没烦恼!5 天前
微服务化的基石——持续集成
java·大数据·word·powerpoint·.net
子兮曰5 天前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
俊昭喜喜里5 天前
java中的继承和多态的区别
java
小羊没烦恼!5 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
爱勇宝5 天前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
譕痕5 天前
JSONObject与JSONArray封装数据格式区别
java·json
胡写代码5 天前
别再前后端各写一套表单校验了
java·后端
小鱼能吃糖5 天前
缺陷修复总览 · mall电商项目:5类缺陷,1个病根,4个业务域
java·电商
此时不提桶,更待何时5 天前
01-06-A-JVM排查实战详解
java·jvm