使用構建器模式優雅的創建對象

前言

通常我們創建對象 會使用以下兩種:

  1. 無參構造函數,使用set賦值
  2. 帶參構造函數

如果需要動態參數,就需要多個構造函數,或者頻繁使用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.

使用內部構造類創建對象可以直觀看到屬性的賦值,特別是用於多參數,需要靈活賦值的對象創建時,如配置或者條件相關類。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章