码迷,mamicode.com
首页 > 其他好文 > 详细

【代码优化】构造器参数繁多时候,考虑使用builder模式

时间:2014-07-01 16:06:14      阅读:223      评论:0      收藏:0      [点我收藏+]

标签:style   java   color   使用   strong   代码   

静态工厂和构造器有个共同的局限性:都不能很好的扩展到大量的可选参数。

1、对于多个可选参数的构造器,我们都习惯采用重叠构造器模式,比如一个参数的构造器调用2个参数的构造器,
    2个参数的构造器调用3个参数的,以此类推。
public class User{

    private int id;
    private String name;
    private String age;
    private String sex;
    
    public User(int id){
        this(id,null);
    }

     public User(int id,String name){
        this(id,name,null);
    }
     public User(int id,String name,String age){
        this(id,name,age,null);
    }

}

当参数足够多的时候,这种就重叠调用模式就很难编写,并且很难阅读。

2、 代替方法,使用javaBean模式,只要调用一个无参构造器创建对象,然后调用setter方法设置每个必要的参数


public class User{

    private int id;
    private String name;
    private String age;
    private String sex;
    
  public User() {}
    //setters
    public void setId (int value){ id= value;}
    public void setName (String value){ name= value;}
    public void setAge (String value){ age= value;}
    public void setSex (String value){ sex= value;}

}

这个javaBean模式弥补了重叠构造器繁琐的调用的,但是,遗憾的是javaBean自身有严重的缺点:因为构造过程被分到
几个构造工程中的javaBean可能是不一致的状态,也就是没法保证线程安全性。

3、 第三种代替方式,既能像重叠构造器那样的安全性,也可以有javaBean那样的可读性。那就是使用Builder模式。

public class User{

    private int id;
    private String name;
    private String age;
    private String sex;
    
  public User(Builder builder) {
            id= builder.id;
            name=builder.name;
            age=builder.age;
            sex=builder.sex;
    }
   
    
    public Builder(int id){
        this.id=id;
    }
    
     public Builder   setName(String val){
        this.name=val;
        return this;
    }
     public Builder   setAge(String val){
        this.age=val;
        return this;
    }
     public Builder   setSex(String val){
        this.sex=val;
        return this;
    }

    
}

总之,如果构造器或者静态工厂中具有很多参数,使用builder模式是不错的选择。




















【代码优化】构造器参数繁多时候,考虑使用builder模式,布布扣,bubuko.com

【代码优化】构造器参数繁多时候,考虑使用builder模式

标签:style   java   color   使用   strong   代码   

原文地址:http://blog.csdn.net/honjane/article/details/36179829

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!