2011-12-14 67 views
2

我有一个Class A具有相当多的成员变量。为了在构造过程中使其不可变并验证成员变量,我将其构造函数设置为private,并使用内部公共静态构建器类(ClassABuilder)来构建它。 (Joshua Bloch Effective Java,第2项)。继承使用静态内部类构建的类生成器

现在我不明白的是,其他程序员将如何继承Class A以实现他们自己的特定行为。我从书中读到了Builder Pattern的缺点,但没有看到提到的子类。我错过了什么吗?有没有一个优雅的方法呢?

使构造函数protected是我的想法之一,但它仍然采取公共静态ClassABuilder,所以如何在子类中添加新的成员变量?

回答

2

继承BClassB创建一个内部公共静态ClassBBuilder生成器,是A级ClassABuilder

+0

这是有效的。它是一些反模式还是通常做的事情? – Abe 2011-12-14 12:45:47

0

为什么构造函数A使用Buildler作为参数。当用户调用Builder.create时,构建器必须初始化默认的受保护构造函数A,然后简单地设置A的字段。所以B,你可以很容易地从A

+0

领域的一个子类是最终的,所以你不能使用setter方法。建设者需要通过构造函数传入以设置这些最终字段 – Abe 2011-12-14 12:53:15