public class Employee {
private String name;
private String address;
private int id;
public Employee() {
// TODO Auto-generated constructor stub
}
@Override
public String toString() {
return "Employee [name=" + name + ", address=" + address + ", id=" + id + "]";
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
public class Main {
public static void main(String[] args) {
Employee e = new Employee();
e.setName("Priyanka");
Employee e1 = new Employee();
e1.setName("Rahul");
e1.setAddress("Delhi");
System.out.println("Value of e :"+ e);
System.out.println("Value of e1:"+ e1);
}
}
答案 0 :(得分:23)
构建器模式可用于:
有关使用构建器创建不可变对象的说明。
在多线程环境中工作时,可以在线程之间共享不可变对象,而无需显式同步。因为该对象在这段时间内无法更改,所以无法使竞争条件由两个线程同时访问和修改。
答案 1 :(得分:9)
无需使用任何模式。您甚至可以通过将变量公开来避免设置方法。但是,
Builder设计模式的目的是将 根据其表示构造复杂对象
答案 2 :(得分:6)
使用构建器模式有一些优点:
与setter(使您的类可变)不同,可以使用构建器来构造不可变的对象。在许多情况下,不可变对象比可变对象更可取,因为它们易于理解和维护,并且避免了在多线程环境中锁定的需求。
构建器可以确保即使在构造之后,该对象也可以满足一些不变量。例如,如果您的类具有一个name
字段,且永远不能为null
,则构建器可以检查此条件,并在不满足要求时无法构造该对象。
通过使用将所有类内容作为参数的构造函数,您也可以完成上述两项操作,但是当您的类具有多个要初始化的字段时,这将非常难以理解。