侧边栏壁纸
博主头像
MD_Tech_博客

行动起来,活在当下

  • 累计撰写 8 篇文章
  • 累计创建 8 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Builder建造者模式

Siuux_7
2025-03-13 / 0 评论 / 0 点赞 / 8 阅读 / 0 字

Builder模式介绍

定义
将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。建造者模式是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建过程。

使用场景
当一个类的构造函数参数超过4个,而且这些参数有些是可选的参数,就可以考虑使用构造者模式

解决的问题

当一个类的构造函数参数超过4个,而且这些参数有些是可选的时,我们通常有两种办法来构建它的对象。 例如我们现在有如下一个类 分类 User,其中name、phone与sex是必填参数,而其他3个是可选参数,那么我们如何构造这个类的实例呢,通常有两种常用的方式:

public class User {  
    private Long id;  
    //姓名  
    private String name;  
    //手机号  
    private String phone;  
    //性别 0 女 1 男  
    private String sex;  
    //身份证号  
    private String idNumber;  
    //头像  
    private String avatar;  
}
  1. 创建不同的构造函数
  2. 使用各种set方法

两种方式在代码维护编写方面都及其浪费时间。

如何实现

  1. 在User中创建一个静态内部类 Builder,然后将User中的参数都复制到Builder类中。
  2. 在User中创建一个private的构造函数,参数为Builder类型
  3. 在Builder中创建设置函数,对User中那些可选参数进行赋值,返回值为Builder类型的实例
  4. 在Builder中创建一个 build()方法,在其中构建User的实例并返回
public class User {  
    private Long id;   
    private String name;  
    private String phone;  
    private String sex;  
    private String idNumber;  
    private String avatar;  

    public static class Builder {  
        private Long id;  
        private String name;  
        private String phone;  
        private String sex;  
        private String idNumber;  
        private String avatar;  
        public Builder id(Long id){  
            this.id = id;  
            return this;  
        }  
        public Builder name(String name){  
            this.name = name;  
            return this;  
        }  
        public Builder phone(String phone){  
            this.phone = phone;  
            return this;  
        }  
        public Builder sex(String sex){  
            this.sex =sex;  
            return this;  
        }  
        public Builder idNumber(String idNumber){  
            this.idNumber = idNumber;  
            return this;  
        }  
        public Builder avatar(String avatar){  
            this.avatar = avatar;  
            return this;  
        }  
        public User build(){  
            return new User(this);  
        }  
    }  
    public static Builder builder(){  
        return new Builder();  
    }  
    public User(Builder builder){  
        this.id = builder.id;  
        this.name = builder.name;  
        this.phone = builder.phone;  
        this.avatar = builder.avatar;  
        this.idNumber = builder.idNumber;  
    }  
    @Override  
    public String toString() {  
        return "User{" +  
                "id=" + id +  
                ", name='" + name + '\'' +  
                ", phone='" + phone + '\'' +  
                ", sex='" + sex + '\'' +  
                ", idNumber='" + idNumber + '\'' +  
                ", avatar='" + avatar + '\'' +  
                '}';  
    }  
}

public class test {  
    public static void main(String[] args) {  
        User user=User.builder()  
                .id(1L)  
                .name("张三")  
                .phone("123123123").build();  
        System.out.println(user);  
    }  
}
0

评论区