使用建造者模式和Lombok簡化代碼

在項目開發中,咱們常常須要構建對象。常見的作法有getter/setter,或者構造器構建對象。
可能會有人寫出相似以下的代碼:dom

Company company=new Company();
company.setAgentId(agentId);
company.setAgentUserId(agentUserId);
company.setCompanyName( companyName );
company.setAgentUserName(agentUserName);
company.setDomain( domain );
company.setTaxNo( taxNo );
company.setCreateTime( new Date() );
company.setIsauth(1);
company.setActivationCode(activationCode);
company.setAuthCode(authCode);
company.setDomain(domain);
company.setUseType(1);
company.setContactor(phoneNumber);

也可能寫了一個參數很是冗長,傳參特別容易出錯的構造方法。ui

Lombok註解

咱們能夠使用Lombok和建造者模式簡化代碼。
(注意,Lombok除了要加入依賴包,還須要配置一下。幾分鐘能夠搞定,具體作法請百度。)
若是你的同事不喜歡用Lombok,或者你想了解一下Lombok註解所表示的代碼塊,你能夠在安裝插件後,經過選擇IDEA導航欄的"Refactor"---"Delombok"將Lombok註解逆向生成代碼。
首先,在Company類上方加入Lombok註解,以下所示:this

@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@RequiredArgsConstructor(staticName = "getCompany")
public class Company {
    private Integer agentUserId;
    @NonNull
    private Integer agentId;
    private String companyName;
    private String agentUserName;
    private String domain;
    private String taxNo;
    private Date createTime;
    private Integer isAuth;
    private String activationCode;
    private String authCode;
    private Integer userType;
    private String phoneNumber;
}

其中的註釋意思以下:google

@Builder:可經過Builder模式構建對象。
@NonNull:變量不能爲空
@Data:包含了getter、setter、toString、equals、hashcode方法。
@NoArgsConstructor : 生成一個無參數的構造方法。
@AllArgsContructor: 會生成一個包含全部變量的構造方法。
@RequiredArgsConstructor: 會生成一個包含常量,和標識了NotNull的變量 的構造方法。
@RequiredArgsConstructor(staticName = "getCompany"):生成的構造方法是private,外部能夠使用static方法訪問。

若是不理解,咱們能夠選擇IDEA導航欄的"Refactor"---"Delombok"逆向生成代碼。
只加註解@RequiredArgsConstructor表示的代碼以下,因爲只有變量agentId爲@NonNull,因此構造方法只有這個變量:插件

public Company(Integer agentId) {
        this.agentId = agentId;
    }

使用註解@RequiredArgsConstructor(staticName = "getCompany")表示的代碼以下:code

private Company() {
    }

    public static Company getCompany() {
        return new Company();
    }

Builder模式構建對象

加入了@Builder後,那麼能夠將代碼改寫成以下:對象

Company company=Company.builder().agentId(1).agentUserId(1).companyName("google")
                                  .agentUserName("lin").domain("test").taxNo("1111111").createTime(new Date())
                                  .isAuth(1).activationCode("0587-1235").userType(1).phoneNumber("666666666")
                                 .build();

基本形式就是: 類名.builder().build() ,在中間加入變量方法及變量的具體值。
經過這種方式構建對象,沒有那麼多的setter,參數也不容易出錯。開發

參考資料:
http://kriszhang.com/lombok/get

相關文章
相關標籤/搜索