设计模式之建造者模式BuilderPattern(七)

一、建造者模式

建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

二、代码实例

1、OrderItem类

@Data:这是Lombok中提供的Getter和Setter方法和toString方法的注解

@AllArgsConstructor:这是Lombok中提供的包含所有参数的构造方法注解

@NoArgsConstructor:这是Lombok中提供的不包含任何参数的构造方法注解

复制代码
package com.xu.demo.builderPattern;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
// 订单项对象
public class OrderItem {

    private String productCode;
    private int quantity;
}

2、Order类

复制代码
package com.xu.demo.builderPattern;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;

// 订单对象
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Order {

    private String orderNumber;
    private List<OrderItem> orderItems;
    private String shippingAddress;
    private String paymentInfo;

}

3、OrderBuilder类

复制代码
package com.xu.demo.builderPattern;

import java.util.ArrayList;

// 订单建造者
public class OrderBuilder {

    private Order order;

    public OrderBuilder() {
        this.order = new Order();
    }

    public OrderBuilder setOrderNumber(String orderNumber) {
        order.setOrderNumber(orderNumber);
        return this;
    }

    public OrderBuilder addOrderItem(String productCode, int quantity) {
        if (order.getOrderItems() == null) {
            order.setOrderItems(new ArrayList<>());
        }
        order.getOrderItems().add(new OrderItem(productCode, quantity));
        return this;
    }

    public OrderBuilder setShippingAddress(String shippingAddress) {
        order.setShippingAddress(shippingAddress);
        return this;
    }

    public OrderBuilder setPaymentInfo(String paymentInfo) {
        order.setPaymentInfo(paymentInfo);
        return this;
    }

    public Order build() {
        return order;
    }
}

4、BuilderPattern

复制代码
package com.xu.demo.builderPattern;

/**
 * 建造者模式测试类
 */
public class BuilderPattern {

    public static void main(String[] args) {

        // 使用建造者构建订单
        Order order = new OrderBuilder()
                .setOrderNumber("123456")
                .addOrderItem("汉堡", 2)
                .addOrderItem("可乐", 1)
                .setShippingAddress("天府大道001号")
                .setPaymentInfo("花呗")
                .build();

        // 打印订单信息
        System.out.println("订单编号: " + order.getOrderNumber());
        System.out.println("送货地址: " + order.getShippingAddress());
        System.out.println("支付方式: " + order.getPaymentInfo());
        System.out.println("订单商品列表: " + order.getOrderItems());

    }
}

运行结果如下:

相关推荐
jsonbro1 小时前
手把手带你实现发布订阅模式
前端·vue.js·设计模式
workflower2 小时前
室内外配送机器人-应用路径
人工智能·机器学习·设计模式·矩阵·自动化
ttod_qzstudio8 小时前
【软考设计模式】原型模式:“克隆“对象与深拷贝、浅拷贝精讲
设计模式·原型模式
geovindu8 小时前
java: Builder Pattern
java·开发语言·后端·设计模式·建造者模式·生成器模式
researcher-Jiang20 小时前
Design Patterns——Template Method入门到情景实战
python·设计模式·模板方法模式
饼干哥哥1 天前
用Claude Code跑通跨境电商的5大场景,顶10个人的团队
人工智能·设计模式·正则表达式
折哥的程序人生 · 物流技术专研1 天前
第3篇:手写促销策略引擎(满减、打折、立减)
java·设计模式·策略模式·开闭原则·编程实战·扩充系列·促销引擎
折哥的程序人生 · 物流技术专研1 天前
第3篇:手写一个饮品制作模板(附代码)
java·设计模式·行为型模式·模版方法模式·钩子方法·代码复用·编程实战
ttod_qzstudio1 天前
【软考设计模式】单例模式:唯一实例的管控与线程安全精讲
单例模式·设计模式
折哥的程序人生 · 物流技术专研1 天前
第4篇:模板方法 vs 策略模式,面试怎么选?
java·设计模式·策略模式·行为型模式·模版方法模式·扩充系列·继承v组合