【发布时间】:2020-06-05 06:51:38
【问题描述】:
我正在研究构建器设计模式并遇到了一个错误。为什么来自 PersonBuilder 类的 Person 成员在 DetailsBuilder 和 JobBuilder 类中不同?它们不应该是同一个对象并且 org 和 name 函数更新同一个对象吗?
当我运行代码时,我得到以下输出:
Person{name='name', org='null'}
Person{name='name', org='null'}
Person{name='null', org='org'}
Person{name='null', org='org'}
代码:
class Person
{
public String name;
public String org;
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", org='" + org + '\'' +
'}';
}
}
class PersonBuilder {
Person person = new Person();
public DetailsBuilder details() {
System.out.println(person);
return new DetailsBuilder();
}
public JobBuilder job() {
System.out.println(person);
return new JobBuilder();
}
public Person build(){
return person;
}
}
class DetailsBuilder extends PersonBuilder{
public PersonBuilder name(String name) {
this.person.name = name;
System.out.println(person);
return this;
}
}
class JobBuilder extends PersonBuilder{
public PersonBuilder org(String org) {
this.person.org = org;
System.out.println(person);
return this;
}
}
public class Main {
public static void main(String[] args) {
PersonBuilder personBuilder = new PersonBuilder();
Person p = personBuilder.details().name("name").job().org("org").build();
System.out.println(p);
}
}
【问题讨论】:
-
我有点不确定,有什么问题。你能提供源代码,它不像你期望的那样工作吗? PS:对于简单的构建器,您可以使用项目 lombok。见projectlombok.org/features/Builder
标签: java inheritance design-patterns