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

ops/2024/10/18 16:48:23/

一、建造者模式

建造者模式(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/ops/26917.html

相关文章

可见性检测-unity掌握常见的可见性检测算法实现原理

Unity中的可见性检测算法是用来确定物体是否在相机的视野范围内&#xff0c;以便进行相应的渲染和优化。其中&#xff0c;最常用的可见性检测算法有两种&#xff1a;Frustum Culling&#xff08;视锥体剔除&#xff09;和Occlusion Culling&#xff08;遮挡剔除&#xff09;。 …

CocoaPods:iOS项目依赖管理的利器

CocoaPods&#xff1a;iOS项目依赖管理的利器 一、引言 在iOS项目的开发过程中&#xff0c;我们经常需要集成各种第三方库来快速实现某些功能&#xff0c;如网络请求、UI组件、数据处理等。然而&#xff0c;手动管理这些第三方库的版本、依赖和更新是一个繁琐且容易出错的过程…

HTTP 与 HTTPS 的区别

HTTP 与 HTTPS 的区别&#xff1f; HTTPHTTPS端口80443安全性无加密&#xff0c;安全性较差有加密机制&#xff0c;安全性较高资源消耗较少由于加密处理&#xff0c;资源消耗更多是否需要证书不需要需要协议运行在TCP协议之上运行在SSL协议之上&#xff0c;SSL运行在TCP协议之…

数据链路层(计算机网络)

0、前言 本文大多数图片都来自于 B站UP主&#xff1a;湖科大教书匠 的教学视频&#xff0c;对高军老师及其团队制作出这么优质的课程表示感谢。本文的撰写目的不是为了应试&#xff0c;且受限于个人水平&#xff0c;可能和标准答案有所出入&#xff0c;请自行甄别&#xff0c;…

Linux基础part-3

1、Linux一般系统查看类命令 【stat】命令 格式&#xff1a;stat [option] file显示文件的元数据信息&#xff0c;包括文件的权限、拥有者、大小、修改时间等。eg&#xff1a;stat myfile.txt 【file】命令 用于确定文件类型格式&#xff1a;file [option] filefile myfile.t…

Scala 多版本下载指南

Scala&#xff0c;这一功能丰富的编程语言&#xff0c;结合了面向对象和函数式编程的精华&#xff0c;为开发者提供了强大的工具来构建高效、可扩展的应用程序。随着Scala社区的不断壮大和技术的演进&#xff0c;多个版本的Scala被广泛应用于不同的项目与场景中。本文旨在为您提…

OpenSSH 漏洞补丁更新笔记

OpenSSH 漏洞补丁更新笔记 相关背景OpenSSH 8.8 以后版本弃用RSA 以及影响centos 更新openssh9.7p1通过rpm包进行安装 Ubuntu更新openssh-9.5p1前置条件下载的源码包导入服务器后操作 相关背景 客户通过第三方扫漏工具发现服务器centos8和Ubuntu22.04有OpenSSH 相关高危漏洞 扫…

面试:ThreadLocal

目录 1、ThreadLocal可以实现〔资源对象】的线程隔离&#xff0c;让每个线程各用各的【资源对象】&#xff0c;避免争用引发的线程安全问题 2、ThreadLocal同时实现了线程内的资源共享 3、原理 4、为什么ThreadLocalMap 中的 key (即 ThreadLocal &#xff09;要设计为弱引用…