看《effective java》的时候,创建对象章节提到使用builder模式来创建对象。觉得非常好用,做一个记录。以后应该就会这么写啦~~~~~~ 对于一个有很多属性的类,在为属性赋值时,通常会用到两种方式,构造函数或者set方法。
- 使用构造函数的时候,如果参数非常多,我们创建对象的时候就会比较痛苦,因为一长串的参数,我们如果想知道哪些值什么意思,就需要一个一个数着参数来探个究竟。对于多个参数类型一样的构造函数,创建对象简直就是噩梦。颠倒了其中两个参数的顺序,编译器也不会报错,在运行时出现错误也很难排查。
- 使用set方法设置必要的参数,是比较常见的一种写法。可读性也比较高。但是文中说,“javaBean模式(也就是set方法)自身有着很严重的缺点,因为构造过程被分到了几个调用中,在构造过程中JavaBean可能处于不一致的状态”,这一点可能我们都很少想到。
duangduangduang。。。。。。Builder模式可以弥补以上不足。
让bean每个属性的set方法都返回一个对象本身的引用。代码如下:
public class User {
private String name;
private int age;
private String sex;
public User setName(String name) {
this.name = name;
return this;
}
public User setAge(int age) {
this.age = age;
return this;
}
public User setSex(String sex) {
this.sex = sex;
return this;
}
}
给User对象赋值就变成了:
User user = new User().setAge(10).setName("张").setSex("男");
是不是很简洁。。。。。
IDEA也支持这种写法呢,很简单,只需要在创建setter的时候,把默认Template换成builder即可。