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

embedded/2024/10/22 10:40:31/

一、建造者模式

建造者模式(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());}
}

 运行结果如下:


http://www.ppmy.cn/embedded/26887.html

相关文章

深入解析yolov5,为什么算法都是基于yolov5做改进的?(一)

YOLOv5简介 YOLOv5是一种单阶段目标检测算法&#xff0c;它在YOLOv4的基础上引入了多项改进&#xff0c;显著提升了检测的速度和精度。YOLOv5的设计哲学是简洁高效&#xff0c;它有四个版本&#xff1a;YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x&#xff0c;分别对应不同的模型大小…

uni-ui 使用uni-icons有些图标显示不出来,如down,up图标

问题描述 我使用的是uni创建时勾选的uni-ui模板&#xff0c;一次偶然机会发现down图标显示不出&#xff0c;left&#xff0c;right等其他图标又可以。 最后发现使用uni-icons不是最新版本导致的&#xff0c;使用模板生成的icons是1.3.5版本&#xff0c;我在插件市场找到的是2.0…

element-plus中使用el-switch时,用‘0,1’或者0,1来代替true,false绑定

介绍 switch 开关默认用 true, false来绑定的&#xff0c;但是在实际的项目中&#xff0c;有时候根据后端的接口返回&#xff0c;也可能会用字符串0 和 1 &#xff0c;或者数字 0,1来代替; 具体实现如下 详情&#xff1a; 主要实现方式是通过使用el-switch组件里的 active-val…

C++ | Leetcode C++题解之第60题排列序列

题目&#xff1a; 题解&#xff1a; class Solution { public:string getPermutation(int n, int k) {vector<int> factorial(n);factorial[0] 1;for (int i 1; i < n; i) {factorial[i] factorial[i - 1] * i;}--k;string ans;vector<int> valid(n 1, 1);…

GPT3 终极指南(一)

原文&#xff1a;zh.annas-archive.org/md5/6de8906c86a2711a5a84c839bec7e073 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 前言 GPT-3&#xff0c;或者说是 Generative Pre-trained Transformer 3&#xff0c;是由 OpenAI 开发的基于 Transformer 的大型语言模型…

力扣刷题 63.不同路径 II

题干 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish”&#xff09;。 现在考虑网格中有障碍物。那么从左上角到…

【网络原理】网络层IP协议 | IP报文格式 | IP地址 | 地址管理 | 路由选择

文章目录 网络层一、IP协议1.IP协议报文格式2.地址管理IP地址不够用的解决方法&#xff1a;1.动态分配IP&#xff1a;过渡方案&#xff0c;目前仍广泛存在。2.NAT机制&#xff08;网络地址转换&#xff09;1.内网IP(局域网IP)2.外网IP(广域网IP) 3.IPv64.网段划分5.子网掩码6.特…

GoLang Gin实际使用

所有代码同步到Admin/gitDemo - Gitee.comhttps://gitee.com/mec-deployment-team_0/git-demo/tree/dev/ 1.创建Gin框架 一般设计一个常规的web项目&#xff0c;都需要以下几个模块 runApp 主函数&#xff0c;运行整个项目routes 路由控制&#xff0c;管理跳转以及路由分组co…