一、多个构造器的缺点
我们有时候可能会遇到编写大量构造器的方法
<span style="font-size:18px;">public class Person { private final String name; private final String sex; private final int age; private final int weight; public Person(String name){ this(name,"男"); } public Person(String name,String sex){ this(name,sex,12); } public Person(String name,String sex,int age){ this(name,sex,age,120); } public Person(String name,String sex,int age,int weight){ this.name = name; this.sex = sex; this.age = age; this.weight = weight; } } </span> 缺点:但是当构造方法更多的时候,往往令我们需要些大量的代码。并且编写出的代码很难令人理解。二、采取新方法:JavaBean。javaBean的优点和缺点
什么叫做javaBean:
方法中只有set()和get()用来获取和修改成员变量的类
示例:
public class Person { private String name; private String sex; private int age; private int weight; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public int getWeight() { return weight; } public void setWeight(int weight) { this.weight = weight; } } 优点:良好的阅读性
Person person = new Person();
person.setName("name");
person.setSex("男");
person.setAge(18);
缺点:多线程的情况下无法保证成员变量的一致性。需要精力去保证线程安全。
三、采取第二种方法:Builder方法 Builder方法的优缺点
什么叫做Builder:比如说你是老板,Builder就是你的秘书。你的下属要将东西提交给你,必须先提交给你的秘书,你的秘书,先整理下属传递过来的文件(哪些,有哪些没有),然后再审核(哪些数据是正确的,哪些数据是错误的)
最后,再将文件传递给你。
使用情形:1、大量可选择填写的成员变量
示例:
public class Person { //第一步:创建你需要的文件的声明,final 表示文件只能被提交一次,不能修改的 private final String name; private final String sex; private final int age; private final int weight; //第四步:创建接收秘书文件的构造方法(私有的),文件必须是由秘书传递来的。 private Person(Builder builder){ this.name = builder.name; this.sex = builder.sex; this.age = builder.age; this.weight = builder.weight; } //第二步:创建Builder,你的秘书 public static class Builder{ //最重要的文件,必须上交 private final String name; //下面都不是中要的文件,可填可不填(一般都提供一个默认值) private String sex; private int age; private int weight; //必须上交的文件,要放在构造方法中 public Builder(String name){ this.name = name; } //创建上交数据的方法,记住上交完之后,秘书是还在的(返回秘书本身) public Builder setSex(String sex) { this.sex = sex; return this; } public Builder setAge(int age) { this.age = age; return this; } public Builder setWeight(int weight) { this.weight = weight; return this; } //第五步:秘书检查完成之后,将文件提交给老板 public Person build(){ return new Person(this); } } }使用:
public static void main(String[]args){ Person person = new Person.Builder("gogo") .setAge(10) .setSex("男") .setWeight(120) .build(); }优点:保持良好的阅读性。又有良好的安全性、并且可以在Builder接收参数的时候判断参数是否正确。
缺点:代码量比较大