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

总结

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

相关推荐
南宫生12 分钟前
力扣每日一题【算法学习day.133】
java·学习·算法·leetcode
獨枭14 分钟前
如何在 Mac 上安装并配置 JDK 环境变量
java·macos·jdk
m0_7383556926 分钟前
java泛型
java·开发语言
web2u30 分钟前
Docker入门及基本概念
java·运维·服务器·spring·docker·容器
jingwang-cs40 分钟前
内外网文件传输 安全、可控、便捷的跨网数据传输方案
人工智能·后端·安全
qq_2187533141 分钟前
常用Git命令
java·git
计算机小白一个1 小时前
蓝桥杯 Java B 组之背包问题(01背包、完全背包)
java·职场和发展·蓝桥杯
计算机毕设定制辅导-无忧学长1 小时前
Maven 基础环境搭建与配置(二)
java·maven
逸狼1 小时前
【JavaEE进阶】Spring IoC
java·spring·java-ee
C#Thread1 小时前
C#上位机--进程和线程的区别
java·开发语言