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

总结

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

相关推荐
艾莉丝努力练剑4 分钟前
【C/C++】类和对象(上):(一)类和结构体,命名规范——两大规范,新的作用域——类域
java·c语言·开发语言·c++·学习·算法
myNameGL16 分钟前
下载一个JeecgBoot-master项目 导入idea需要什么操作启动项目
java·ide·intellij-idea
AQin101220 分钟前
IP 🆚 MAC,你分得清吗?
后端·网络协议
Emotion亦楠36 分钟前
Java 学习笔记:常用类、String 与日期时间处理
java·笔记·学习
天涯学馆40 分钟前
Solidity 中的高级模式匹配:提升代码的可读性和可维护性
后端·区块链·solidity
郝学胜-神的一滴1 小时前
Spring Boot Actuator 保姆级教程
java·开发语言·spring boot·后端·程序人生
剪刀石头布啊2 小时前
数据口径
前端·后端·程序员
剪刀石头布啊2 小时前
http状态码大全
前端·后端·程序员
jiangxia_10242 小时前
面试系列:什么是JAVA并发编程中的JUC并发工具类
java·后端
用户1512905452202 小时前
踩坑与成长:WordPress、MyBatis-Plus 及前端依赖问题解决记录
前端·后端