0

我有 Person 类,我想输入用户的数据,如名字、年龄、性别、体重等。(我想使用 Scanner 类。)

我应该如何处理输入数据以创建 Person 类的对象? 我考虑了以下选项,并想知道使用哪一个。

1)在开始时使用无参数构造函数创建一个 Person 对象,然后 - 输入一个数据(例如名字) - 使用 Person 的 SETTER 在上述对象中设置此数据 - 对其他部分重复上述步骤data 最后将对象发送到 PersonDAO

缺点:如果我为 Person 类包含一个无参数的构造函数,我有点允许在程序的其他地方创建一个“空”的无效 Person 对象。(我不确定我是否真的应该担心这一点。)

2)在 END 处创建一个带有多参数构造函数的 Person 对象。- 首先逐个输入数据,并将它们保存在数组/列表/变量中。- 完成输入后,从数组/列表/变量中提取数据片段,并通过将它们放入 Person 的构造函数(一个具有许多参数)来创建一个 Person 对象。最后将对象发送到 PersonDAO。

缺点:如果其中一个论点无效,我会很晚才知道这一点。整个过程看起来更复杂。

那么哪个选项更好呢?在将输入数据发送到 DAO 之前,也许还有其他处理输入数据的方法......

而且我猜,DAO 将使用对象的 GETTERS 在数据库中创建记录?

4

1 回答 1

1

我建议使用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;
        }

    }
}

所以你的课:

  • 可以有任意数量的初始化参数
  • 验证该类在build方法内已准备就绪
  • 类变得不可变
  • 封装的构造函数
于 2016-10-23T17:07:05.943 回答