[Effective Java 读书笔记] 第二章 创建和销毁对象 第二条

第二条 遇到多个构造器参数时,可以考虑用构建器

    当遇到有多个构造器参数时,常见的是用重叠构造器,即:

public class TestClass{
    public TestClass(int para0){
        this(para0,0);
    }    
    public TestClass(int para0,int para1){
        this(para0,para1,0);
    }  
    public TestClass(int para0,int para1,int para2){
       this.para0 = para0;
       this.para1 = para1;
       this.para2 = para2;
    }                 
} 

  当需要的参数多了以后,上述方法难以阅读,参数含义不太明显,一长串类型相同的参数也容易有微妙的错误,比如颠倒等。

  而如果使用JavaBeans模式,即为每个参数创建一个setter的方法,这样可读性提高,每个参数的设置都有含义,但是整个构建方法被分为几个调用,导致构建过程中处于不一致的状态,需要额外保证线程安全

  推荐使用 Builder模式,抄了网上的一个代码段:

   

public class DoDoContact {
    private final int    age;
    private final int    safeID;
    private final String name;
    private final String address;
 
    public int getAge() {
        return age;
    }
 
    public int getSafeID() {
        return safeID;
    }
 
    public String getName() {
        return name;
    }
 
    public String getAddress() {
        return address;
    }
 
    public static class Builder {
        private int    age     = 0;
        private int    safeID  = 0;
        private String name    = null;
        private String address = null;

   // 构建的步骤
        public Builder(String name) {
            this.name = name;
        }
 
        public Builder age(int val) {
            age = val;
            return this;
        }
 
        public Builder safeID(int val) {
            safeID = val;
            return this;
        }
 
        public Builder address(String val) {
            address = val;
            return this;
        }
 
        public DoDoContact build() { // 构建,返回一个新对象
            return new DoDoContact(this);
        }
    }
 
    private DoDoContact(Builder b) {
        age = b.age;
        safeID = b.safeID;
        name = b.name;
        address = b.address;
 
    }
}

//调用:
  DoDoContact ddc = new DoDoContact.Builder( "Ace" ).age( 10 )
                 .address( "beijing" ).build();
 

 

    

 

转载于:https://www.cnblogs.com/jiangz222/p/4753200.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值