前言
通常我們建立對象 會使用以下兩種:
- 無參構造函數,使用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.
使用内部構造類建立對象可以直覺看到屬性的指派,特别是用于多參數,需要靈活指派的對象建立時,如配置或者條件相關類。