天天看点

使用构建器模式优雅的创建对象

前言

通常我们创建对象 会使用以下两种:

  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.

使用内部构造类创建对象可以直观看到属性的赋值,特别是用于多参数,需要灵活赋值的对象创建时,如配置或者条件相关类。