逐渐构建对象,同时避免空值

时间:2012-08-23 19:34:03

标签: java oop builder

我有一个刮刀,它扫描网页上的特定信息并从中创建一个对象。其中一个属性是 id ,稍后会使用来查询新对象的剩余属性

因为构建这个对象的责任被分成几个类(刮刀类和使用其中一个属性查询的类),所以我想避免使用传递 Builder (另外,带有访问器的Builder模式对我来说似乎很奇怪。

同时,我想在正在构建的对象中避免空引用

Guava的可选似乎不太适合,因为在构造完所有步骤之后,对象的属性肯定不会为null。

我可以创建单独的类,如下所示:

class ScrapeablePersonImportPart {

    String surname;
    Year yearOfBirth;
    String externalId;

    // ... getters, constructor ...

}

class PersonImport extends ScrapeablePersonImportPart {

    SocialSecurityNumber ssn;
    Color favoriteColor;

    // ... getters, constructor ...

    PersonImport( ScrapeablePersonImportPart part, SocialSecurityNumber ssn, Color favoriteColor ) {
        this.surname = part.getSurname();
        this.yearOfBirth = part.getYearOfBirth();
        this.externalId = part.getExternalId();
        this.ssn = ssn;
        this.favoriteColor = favoriteColor;
    }

}

或者我可以避免使用子类并使用合成。

随着程序的发展,构造可能会构成更多步骤

具有多个单独类的解决方案是否合理?

1 个答案:

答案 0 :(得分:1)

我会使用合成,因为你传递的是ScrapeablePersonImportPart,你可以委托给它而不是继承它。由于您可能有一个新的XYZPart被传递,因此委托是有意义的,因为无论如何都无法继承。

如果这些只是用于保存动态数据字段的虚拟对象,我很想使用HashMap