建造者模式

为什么要用建造者模式,例如Person p=new Person(10个参数),这样会很头疼,参数一多,无法分辨

灵活性:可以按需设置,无需定义多个构造方法

可读性:链式调用使代码简介名了

扩展性:如果增加了新属性,只需要在Builder中添加相应的方法

public class Person {

// 属性

private String name;

private int age;

private String email;

// 私有构造函数,防止直接实例化

private Person(Builder builder) {

this.name = builder.name;

this.age = builder.age;

this.email = builder.email;

}

// Getter 方法

public String getName() {

return name;

}

public int getAge() {

return age;

}

public String getEmail() {

return email;

}

// 静态内部类 Builder

public static class Builder {

private String name;

private int age;

private String email;

// 设置 name 并返回 Builder 对象

public Builder setName(String name) {

this.name = name;

return this;//this指代当前Builder对象

}

// 设置 age 并返回 Builder 对象

public Builder setAge(int age) {

this.age = age;

return this;

}

// 设置 email 并返回 Builder 对象

public Builder setEmail(String email) {

this.email = email;

return this;

}

// 构建 Person 对象

public Person build() {

return new Person(this);

}

}

@Override

public String toString() {

return "Person{" +

"name='" + name + '\'' +

", age=" + age +

", email='" + email + '\'' +

'}';

}

}

使用方式

public class Main {

public static void main(String[] args) {

// 使用建造者模式构造 Person 对象

Person person = new Person.Builder()

.setName("John Doe")

.setAge(30)

.setEmail("john.doe@example.com")

.build();

// 输出 Person 对象

System.out.println(person);

}

}

相关推荐
i***13241 分钟前
SpringCloud实战十三:Gateway之 Spring Cloud Gateway 动态路由
java·spring cloud·gateway
计算机徐师兄3 分钟前
Java基于微信小程序的食堂线上预约点餐系统【附源码、文档说明】
java·微信小程序·食堂线上预约点餐系统小程序·食堂线上预约点餐微信小程序·java食堂线上预约点餐小程序·食堂线上预约点餐小程序·食堂线上预约点餐系统微信小程序
无心水1 小时前
【分布式利器:腾讯TSF】10、TSF故障排查与架构评审实战:Java架构师从救火到防火的生产哲学
java·人工智能·分布式·架构·限流·分布式利器·腾讯tsf
Boilermaker19928 小时前
[Java 并发编程] Synchronized 锁升级
java·开发语言
Cherry的跨界思维8 小时前
28、AI测试环境搭建与全栈工具实战:从本地到云平台的完整指南
java·人工智能·vue3·ai测试·ai全栈·测试全栈·ai测试全栈
MM_MS8 小时前
Halcon变量控制类型、数据类型转换、字符串格式化、元组操作
开发语言·人工智能·深度学习·算法·目标检测·计算机视觉·视觉检测
꧁Q༒ོγ꧂9 小时前
LaTeX 语法入门指南
开发语言·latex
njsgcs9 小时前
ue python二次开发启动教程+ 导入fbx到指定文件夹
开发语言·python·unreal engine·ue
alonewolf_999 小时前
JDK17新特性全面解析:从语法革新到模块化革命
java·开发语言·jvm·jdk
一嘴一个橘子9 小时前
spring-aop 的 基础使用(啥是增强类、切点、切面)- 2
java