建造者模式(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:提供了一系列方便的建造者类,用于创建复杂对象。

总结

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

相关推荐
会员果汁10 小时前
13.设计模式-适配器模式
设计模式·适配器模式
海边的Kurisu11 小时前
苍穹外卖日记 | Day1 苍穹外卖概述、开发环境搭建、接口文档
java
uzong13 小时前
后端线上发布计划模板
后端
C雨后彩虹14 小时前
任务最优调度
java·数据结构·算法·华为·面试
uzong14 小时前
软件工程师应该关注的几种 UML 图
后端
heartbeat..14 小时前
Spring AOP 全面详解(通俗易懂 + 核心知识点 + 完整案例)
java·数据库·spring·aop
Jing_jing_X15 小时前
AI分析不同阶层思维 二:Spring 的事务在什么情况下会失效?
java·spring·架构·提升·薪资
上进小菜猪16 小时前
基于 YOLOv8 的 100 类中药材智能识别实战 [目标检测完整源码]
后端
元Y亨H16 小时前
Nacos - 服务发现
java·微服务
微露清风17 小时前
系统性学习C++-第十八讲-封装红黑树实现myset与mymap
java·c++·学习