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

news/2024/10/21 9:52:21/

一、建造者模式

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

相关文章

免费、中文版的 Postman 替代工具,提高工作效率

为啥不用 Postman Postman 是挺好用的&#xff0c;但是人家就是死活不支持中文啊。。。这也导致了上手门槛的增高&#xff0c;劝退了很多人~ 接下来推荐几款可以替代 Postman 的国产 API 工具。 怎么替代&#xff1f; 先来说说国内有哪些API工具&#xff1a; ApifoxEolink…

CSS:css简介

CSS 层叠样式表 css简介 给html设置样式,美化css,实现结构和样式的分离 css的编写位置 1,行内样式(内联样式) 在标签内添加属性 不能复用,没有体现结构和样式的分离 style"" //在style属性内添加样式,样式以名值对形式存在2,内部样式 在单独的style标签(写在…

微信小程序个人开放服务类目表

微信小程序个人开放服务类目表 服务类目类目分类一类目分类二引导描述出行与交通代驾//生活服务家政、丽人、摄影/扩印、婚庆服务、环保回收/废物回收//餐饮点评与推荐、菜谱、餐厅排队//旅游出境WiFi、旅游攻略//商业服务会展服务、律师/ 【律师】类目需上传《律师执业资格证…

【经验总结】 PostgreSQL的COALESCE 函数用法

COALESCE 函数在 PostgreSQL 中是一个非常有用的函数&#xff0c;它不仅可以用来自动替换 NULL 值&#xff0c;还可以用于多种其他场景。COALESCE 函数接受一系列的参数&#xff0c;并返回第一个非 NULL 的参数值。如果所有参数都是 NULL&#xff0c;那么 COALESCE 函数将返回 …

9、开发基于FemWorkbench的CFD模块

CFD求解器设计针对FreeCAD 背景与动机&#xff1a;SolidWorks不仅提供了FEM功能&#xff0c;还具备CFD功能。为了使FreeCAD拥有类似的功能&#xff0c;考虑在现有的Fem Workbench上添加CFD功能&#xff0c;并重用大部分基础设施。 CFD模拟需求&#xff1a;CFD模拟需要复杂的设…

mybatix常见查询

使用MyBatis进行复杂SQL查询和操作是一种常见的需求&#xff0c;这通常涉及到动态SQL的使用。在MyBatis中&#xff0c;你可以使用XML映射文件或注解来构建这些复杂的SQL语句。以下是一些示例&#xff0c;覆盖你所提及的动态查询分页、分组、多表联查等情况。 动态查询分页 在M…

python 反引号怎么打

切换到英文输入法模式下。 找到电脑键盘 Esc 下面的键。 敲两下就出现反引号了。

PyQt介绍——绘图QPen和Qbrush

一、QPen QPen&#xff08;钢笔&#xff09;是一个基本的图形对象&#xff0c;用于绘制直线&#xff0c;曲线或者给轮廓画出矩形&#xff0c;椭圆形&#xff0c;多边形及其他形状 例子&#xff1a; # -*- coding: utf-8 -*- import sys from PyQt5.QtWidgets import * from …