前言
通常我們創建對象 會使用以下兩種:
- 無參構造函數,使用set賦值
- 帶參構造函數
如果需要動態參數,就需要多個構造函數,或者頻繁使用set方法,不夠優雅和直觀
//使用默認構造函數,set方法賦值
User defaultUser = new User();
defaultUser.setUserName("yang.liu");
defaultUser.setPassword("password");
defaultUser.setAge(18);
defaultUser.setSex(true);
//使用帶參數構造函數, 需要多個構造函數,屬性賦值不夠直觀
User paramUserFirst = new User("yang.liu", "password");
User paramUserSecond = new User("yang.liu", "password", 18, true);
構建器模式(Builder模式)
在類的內部寫一個靜態內部類,使用內部類進行創建類對象,並選擇性的設置屬性,不需要繁雜的setter與getter。
創建一個類
import lombok.Data;
/**
* 用戶
*
* @author yang.liu
*/
@Data
public class User {
private String userName;
private String password;
private Integer age;
private Boolean sex;
/**
* 內部構造類
*/
public static class Builder {
public Builder() {
}
private User user = new User();
public Builder userName(String userName) {
this.user.setUserName(userName);
return this;
}
public Builder password(String password) {
this.user.setPassword(password);
return this;
}
public Builder age(Integer age) {
this.user.setAge(age);
return this;
}
public Builder sex(Boolean sex) {
this.user.setSex(sex);
return this;
}
public User build() {
return this.user;
}
}
/**
* 創建構造類對象
*
* @return
*/
public static Builder builder() {
return new Builder();
}
}
使用示例
User user = User.builder()
.userName("yang.liu")
.password("password")
.age(18)
.sex(true).build();
LY.
使用內部構造類創建對象可以直觀看到屬性的賦值,特別是用於多參數,需要靈活賦值的對象創建時,如配置或者條件相關類。