1.如果你期望在构造对象之前逐步收集该对象与构造相关的信息,可使用Builder(生成器)模式
2.举例
//Person.Builder嵌套类,自定义类型加载参数对象Person.Age
public class Person {
private final int id;
private final String name;
private final int age;
public Person(Builder builder) {
// TODO Auto-generated constructor stub
this.id = builder.id;
this.name = builder.name;
this.age = builder.age.getAge();
}
public int getId() {
return id;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public static class Builder{
private int id;
private String name;
private Age age;
public Builder setId(int id) {
this.id = id;
return this;
}
public Builder setName(String name) {
this.name = name;
return this;
}
public Builder setAge(Age age) {
this.age = age;
return this;
}
public Person build(){
return new Person(this);
}
}
public static class Age {
private int age;
public Age setAge(int age) {
this.age = age;
return this;
}
public int getAge(){
return age;
}
}
}
//测试类
public class Test {
public static void main(String[] args){
Person.Age a = new Person.Age().setAge(10);
Person p = new Person.Builder().setId(1).setName("lin").setAge(a).build();
System.out.println(p.getId());
System.out.println(p.getName());
System.out.println(p.getAge());
}
}
//结果
1
lin
10
3.总结:Builder(生成器)模式的意图是把构造对象实例的代码逻辑一道要实例化的类的外部(即Person.Builder与Person.Age可移出Person类)。Builder(生成器)模式将一个复杂对象的构造逻辑从其代码中分离出来。其直接的效果就是简化了原来复杂的目标对象。另外,该模式还使得我们可以逐步构造目标类对象。
4.参考:http://www.importnew.com/6605.html