Java代码优化-第二章
了解一下什么是Builder模式?
Builder 模式是一种创建型设计模式,它主要解决的是复杂对象构造的问题。通俗来讲,就是将对象的创建过程封装起来,使得创建过程可以灵活的使用,而且易于维护。
在 Builder 模式中,我们通过定义一个 Builder 类来封装对象的创建过程,其主要作用是隔离了复杂对象的构造和表示,从而使得相同的构建过程可以创建不同的表示。通常来讲, Builder 类会由多个设置方法,每个方法对应对象中的一个属性,这样就可以按照我们所需的任意顺序来设置对象的属性。
使用 Builder 模式的主要优势在于,可以将对象的创建逻辑与客户端代码分离,从而可以控制对象的创建过程并根据需要进行更改。此外,Builder 模式还可以解决一些复杂对象的问题,例如多个部件之间的构造关系,或者需要根据不同的条件构造不同的对象等。因此, Builder 模式被广泛应用于工厂模式和抽象工厂模式的实现中。
小知识:与Builder模式背道而驰的是直接构造对象(直接实例化对象),也就是说在代码中通过new关键字来构造对象。
问题代码
//问题代码原代码通常将实例化直接进行逐个set赋值
public class User {
private String name;
private String telephone;
private String sex;
private int age;
private String address;
//getter、setter略
}
//其余略
解决方案-使用builder模式重构
//此为样例 请自行重构
//主类User
public class User {
private String name;
private String telephone;
private String sex;
private int age;
private String address;
//1、builder 类将属性统一赋值给builder类
//2、后续添加参数只需在builder类添加所需要传入的参数
//3、注意主类的构造方法赋值,给予builder类的赋值 如:this.主类参数 = builder类参数;
private User(UserBuilder builder) {
this.name = builder.name;
this.telephone = builder.telephone;
this.sex = builder.sex;
this.age = builder.age;
this.address = builder.address;
//3、注意主类的构造方法赋值,给予builder类的赋值 如:this.主类参数 = builder类参数;
//this.主类参数 = builder类参数;
}
//UserBuilder ——Builder类
public static class UserBuilder {
private String name;
private String telephone;
private String sex;
private int age;
private String address;
public UserBuilder setName(String name) {
this.name = name;
return this;
}
public UserBuilder setTelephone(String telephone) {
this.telephone = telephone;
return this;
}
public UserBuilder setSex(String sex) {
this.sex = sex;
return this;
}
public UserBuilder setAge(int age) {
this.age = age;
return this;
}
public UserBuilder setAddress(String address) {
this.address = address;
return this;
}
}
}
//样例
public static void main(String[] args) {
//1、用UserBuilder类创建对象复制
//2、将赋值的参数全部赋予User类
//3、Builder 对象上逐个调用set的方法,然后再调用 build() 方法来构造对象
User user = new User.UserBuilder()
.setName("张三")
.setTelephone("18812546788")
.setSex("男")
.setAge(31)
.build();
System.out.println("通过Builder模式构建的User对象: " + user);
}
个人总结:
1、Builder 对象上逐个调用set的方法,然后再调用 build() 方法来构造对象。虽然这样做可能会稍微麻烦一些,但相比起直接使用构造函数或者 setter 方法来说,这样做能够带来很多好处;
2、Builder 模式的核心是将一个复杂对象的构建过程拆分成多个简单的步骤,每个步骤都有相应的设置方法。这样做的好处是可以根据需要修改构建过程中的某些步骤,而不需要修改构造函数或者 setter 方法的参数结构,提高了代码的灵活性和可维护性;
3、可以根据需求写不同的构造方法,只需要改动赋值方法即可不用触动过多业务代码;
4、后续需要参数只需改动 Builder 类和主类的构造方法即可。
参考链接:
https://blog.csdn.net/u014454538/article/details/122377789