输入数据时用什么方式创建对象?
Which way to create an object when inputting data?
我有 class 个人,我想从用户那里输入数据,例如名字、年龄、性别、体重等(我想使用扫描仪 class。)
如何处理输入数据来创建class人的对象?
我考虑以下选项,想知道使用哪一个。
1) 在 START 处创建一个带有无参数构造函数的 Person 对象,然后
- 输入一条数据(例如名字)
- 使用 Person 的 SETTER 在上述对象中设置此数据
- 对其他数据重复上述步骤
最后将对象发送到 PersonDAO
缺点:如果我为 Person class 包含一个无参数构造函数,我有点允许在程序的其他地方创建一个“空的”无效 Person 对象。 (我不确定我是否真的应该为此担心。)
2) 在 END 处创建一个带有多参数构造函数的 Person 对象。
- 先将数据一条条输入,保存在一个array/alist/variables中。
- 完成输入后,从数组/list/variables 中提取数据片段,并通过将它们放入 Person 的构造函数(具有许多参数)来创建一个 Person 对象
最后将对象发送到 PersonDAO。
缺点:如果其中一个参数无效,我会很晚才知道。整个过程看起来比较复杂。
那哪个选项更好呢?也许在将输入数据发送到 DAO 之前还有其他处理输入数据的方法...
我猜,DAO 会使用对象的 GETTERS 在数据库中创建记录吗?
我建议使用 Builder 设计模式。
看起来像:
public final class Person {
private String firstName;
private String lastName;
private int age;
private Person() {}
public String getFirstName() {
return firstName;
}
public String getLastName() {
return lastName;
}
public int getAge() {
return age;
}
public static Builder newBuilder () {
return new Person(). new Builder();
}
public class Builder {
public Builder setFirstName(String firstName) {
//validate concrete params here with RuntimeExceptions
Person.this.firstName = firstName;
return this;
}
public Builder setLastName(String lastName) {
Person.this.lastName = lastName;
return this;
}
public Builder setAge(int age) {
Person.this.age = age;
return this;
}
public Person build() {
//validate filling of Person here
return Person.this;
}
}
}
所以你的 class :
- 可以有任意数量的初始化参数
- 验证 class 已在
build
方法中准备就绪
- class 变得不可变
- 封装构造函数
我有 class 个人,我想从用户那里输入数据,例如名字、年龄、性别、体重等(我想使用扫描仪 class。)
如何处理输入数据来创建class人的对象? 我考虑以下选项,想知道使用哪一个。
1) 在 START 处创建一个带有无参数构造函数的 Person 对象,然后 - 输入一条数据(例如名字) - 使用 Person 的 SETTER 在上述对象中设置此数据 - 对其他数据重复上述步骤 最后将对象发送到 PersonDAO
缺点:如果我为 Person class 包含一个无参数构造函数,我有点允许在程序的其他地方创建一个“空的”无效 Person 对象。 (我不确定我是否真的应该为此担心。)
2) 在 END 处创建一个带有多参数构造函数的 Person 对象。 - 先将数据一条条输入,保存在一个array/alist/variables中。 - 完成输入后,从数组/list/variables 中提取数据片段,并通过将它们放入 Person 的构造函数(具有许多参数)来创建一个 Person 对象 最后将对象发送到 PersonDAO。
缺点:如果其中一个参数无效,我会很晚才知道。整个过程看起来比较复杂。
那哪个选项更好呢?也许在将输入数据发送到 DAO 之前还有其他处理输入数据的方法...
我猜,DAO 会使用对象的 GETTERS 在数据库中创建记录吗?
我建议使用 Builder 设计模式。 看起来像:
public final class Person {
private String firstName;
private String lastName;
private int age;
private Person() {}
public String getFirstName() {
return firstName;
}
public String getLastName() {
return lastName;
}
public int getAge() {
return age;
}
public static Builder newBuilder () {
return new Person(). new Builder();
}
public class Builder {
public Builder setFirstName(String firstName) {
//validate concrete params here with RuntimeExceptions
Person.this.firstName = firstName;
return this;
}
public Builder setLastName(String lastName) {
Person.this.lastName = lastName;
return this;
}
public Builder setAge(int age) {
Person.this.age = age;
return this;
}
public Person build() {
//validate filling of Person here
return Person.this;
}
}
}
所以你的 class :
- 可以有任意数量的初始化参数
- 验证 class 已在
build
方法中准备就绪 - class 变得不可变
- 封装构造函数