1. 程式人生 > >使用建造者模式和Lombok簡化代碼

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

容易 name EDA pre 還需要 user sco 不能 str

在項目開發中,我們經常需要構建對象。常見的做法有getter/setter,或者構造器構建對象。
可能會有人寫出類似如下的代碼:

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);

也可能寫了一個參數非常冗長,傳參特別容易出錯的構造方法。
我們可以使用Lombok和建造者模式簡化代碼,首先,在Company類上方加入Lombok註解,如下所示:
(註意,Lombok除了要加入依賴包,還需要配置一下。幾分鐘可以搞定,具體做法請百度)

@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@RequiredArgsConstructor(staticName = "of")
public class Company {
    @NonNull
    private Integer agentId;
    @NonNull
    private Integer agentUserId;
    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;
}

其中的註釋意思如下:
@Builder:可通過Builder模式構建對象。
@NonNull:變量不能為空
@Data:包含了getter、setter、toString、equals、hashcode方法。
@NoArgsConstructor : 生成一個無參數的構造方法。
@AllArgsContructor: 會生成一個包含所有變量的構造方法。
@RequiredArgsConstructor: 會生成一個包含常量,和標識了NotNull的變量 的構造方法。生成的構造方法是private,如果想要對外提供使用可以使用staticName選項生成一個static方法。

加入了@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/

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