2

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

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

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

Guava 的 Optional似乎也不太合适,因为在其构造的所有步骤完成后,对象的属性肯定不会为空。

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

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;
    }

}

或者我可以避免子类化并改用组合。

随着程序的发展,构造很可能包括更多的步骤。

具有几个单独类的解决方案看起来合理吗?

4

1 回答 1

1

我会改用组合,因为您传递的是 aScrapeablePersonImportPart您可以委托给它而不是从它继承。由于您可能有一个新XYZPart的传入,因此委托是有意义的,因为无论如何您都不能从两者继承。

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

于 2012-08-23T19:46:38.893 回答