建造者模式(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 分钟前
在Spring Boot中实现多线程任务调度
java·spring boot·spring
虫小宝1 小时前
如何在Java中实现PDF生成
java·开发语言·pdf
Java4ye1 小时前
Netty 是如何解析 Redis RESP 协议的——请求篇
后端
菜鸡且互啄692 小时前
在线教育平台,easyexcel使用案例
java·开发语言
八月林城2 小时前
JAVA导出数据库字典到Excel
java·数据库·excel
浅念同学4 小时前
算法-常见数据结构设计
java·数据结构·算法
杰哥在此6 小时前
Java面试题:讨论持续集成/持续部署的重要性,并描述如何在项目中实施CI/CD流程
java·开发语言·python·面试·编程
咖啡煮码7 小时前
深入剖析Tomcat(十五、十六) 关闭钩子,保证Tomcat的正常关闭
java·tomcat
C.C7 小时前
java IO流(1)
java·开发语言
刘铸纬8 小时前
Golang中defer和return顺序
开发语言·后端·golang