构造器builder

本文介绍了在Java中使用Builder模式解决构造器参数过多的问题,特别是在参数数量超过四个时更为适用。通过具体示例展示了如何定义和使用Builder类来简化对象创建过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

遇到多个构造器参数时考虑用构造器

  • 提到了流畅接口的问题
  • 使用Builder来解决问题
  • Effective java的内容
  • 当可变参数大于4个以上的时候用Builder,当然一开始就用是比较好的
public class Person {
    //这里可以直接使用final没有问题的!!!
    private final String firstName;//必填
    private final String lastName;//必填

    private String city;//下面3个是选填!
    private String adress;
    private boolean marry;

    //这里考虑了用内部的Builder!也可以在外面声明Builder类

    public static class Builder {//Builder是静态 类 !!
        private String firstName;//直接把里面的字段写下来
        private String lastName;//这里需要不需要直接先    = null??

        private String city;//
        private String adress;
        private boolean marry;

        public Builder (String firstName , String lastName){
            this.firstName = firstName;
            this.lastName = lastName;
        }
        public Builder setCity(String city){
            this.city = city;
            return this;
        }
        public Builder setAdress(String adress){
            this.adress = adress;
            return  this;
        }
        public Builder setMarry(boolean marry){
            this.marry = marry;
            return this;
        }

        public Person build(){
            return new Person(this);
        }
    }
    private Person(Builder builder){//构造方法私有化
        firstName = builder.firstName;
        lastName = builder.lastName;
        city = builder.city;
        adress = builder.adress;
        marry = builder.marry;
    }
}
  • 下面的如何调用
public class test {
    Person mPerson = new Person.Builder("xin","gao")
            .setCity("henan")
            .setMarry(false)
            .build();//不是必填的可以随意添加
}
  • 通过该Builder模式,以后如果在需要添加参数,直接在Builder中添加setXXX()就行了!!
  • 恩 现在就知道这么多…初次理解(刘欣课中的理解)//大家也关注下:微信号 码农翻身
### Java Builder 设计模式概述 Builder设计模式属于创建型模式之一,在Java编程中广泛应用。这种模式允许分步骤地构造复杂对象,使得同样的构建过程能够创建不同的表示[^1]。 ### 原理说明 当一个类具有多个属性,并且这些属性可能不是全部都需要初始化时,使用传统的构造函数方式可能会变得非常繁琐。此时采用Builder模式可以简化对象的创建流程。通过引入内部静态类`Builder`来逐步设置各个字段,最后调用`build()`方法返回最终的对象实例。 ### 使用示例 下面是一个简单的例子展示如何利用Builder模式创建复杂的对象: #### 定义带有Builder模式的类 ```java public class Phone { private final String brand; private final int ram; private final double screenSize; // 私有化构造器防止外部直接new private Phone(Builder builder){ this.brand = builder.brand; this.ram = builder.ram; this.screenSize = builder.screenSize; } @Override public String toString(){ return "Brand:" + brand + ", RAM:" + ram +"GB, Screen Size:"+screenSize+" inches"; } // 静态内部类作为Builder public static class Builder{ private String brand; private int ram; private double screenSize; public Builder setBrand(String brand){ this.brand = brand; return this; // 返回当前Builder实例以便链式调用 } public Builder setRam(int ram){ this.ram = ram; return this; } public Builder setScreenSize(double screenSize){ this.screenSize = screenSize; return this; } // 构建并返回完整的Phone对象 public Phone build(){ return new Phone(this); } } } ``` #### 创建对象实例 ```java // 使用Builder模式创建Phone对象 Phone myPhone = new Phone.Builder() .setBrand("Apple") .setRam(8) .setScreenSize(6.1) .build(); System.out.println(myPhone); // 输出: Brand:Apple, RAM:8GB, Screen Size:6.1 inches ``` 上述代码展示了如何定义一个支持Builder模式的`Phone`类以及怎样使用这个模式去创建具体的手机对象。值得注意的是,这里重写了`toString()`方法,因此可以直接打印出有意义的信息而不是默认的对象地址[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值