首页 > 代码库 > 【代码优化】构造器参数繁多时候,考虑使用builder模式
【代码优化】构造器参数繁多时候,考虑使用builder模式
静态工厂和构造器有个共同的局限性:都不能很好的扩展到大量的可选参数。
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模式是不错的选择。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。