【问题标题】:Inheriting a class which is built using a static inner class Builder继承使用静态内部类 Builder 构建的类
【发布时间】:2011-12-14 12:25:42
【问题描述】:

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

现在我不明白的是,其他程序员如何继承Class A 来实现他们自己的特定行为。我从书中阅读了 Builder Pattern 的缺点,但没有看到子类化被提及。我错过了什么吗?有没有一种优雅的方式来解决这个问题?

制作构造函数protected是我的想法之一,但它仍然会采用公共静态ClassABuilder,那么如何在子类中添加新的成员变量?

【问题讨论】:

    标签: java design-patterns builder-pattern


    【解决方案1】:

    ClassB 中创建一个内部公共静态ClassBBuilder 构建器,它是ClassABuilder 的子类

    【讨论】:

    • 那行得通。是一些反模式还是通常会做的事情?
    • 这是面向对象的设计。然后,您可以简单地将已添加到 ClassB 的其他成员变量添加到 ClassBBuilder。
    【解决方案2】:

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

    【讨论】:

    • A 类的字段是最终的,因此您不能使用 setter。需要通过构造函数传入builder来设置这些final字段
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-14
    • 1970-01-01
    • 1970-01-01
    • 2022-08-20
    • 2015-04-07
    • 2017-01-19
    • 1970-01-01
    相关资源
    最近更新 更多