【问题标题】:Java - inner private class only to encapsulate construction for outer classJava - 内部私有类仅用于封装外部类的构造
【发布时间】:2014-06-07 18:10:34
【问题描述】:

拥有类,即内部类(不是静态的),唯一的任务是构造和启动外部类的对象(在她的构造函数中),这是一种好习惯吗? 此类的生命周期将等于外部类的构造函数的生命周期。

示例如下:

OuterClass {
    // (...fields here...)
    private ConstructClass {
        // (...some useful methods and fields here...)
        public ConstructClass(String param1, int param2, ...) {
           // (...construction of OuterClass here...)
        }
    }
    public OuterClass(String param1, int param2, ...) {
        new ConstructClass(param1, param2, ...);
    }
}

【问题讨论】:

  • 这是您需要的吗?你为什么要这样做?
  • 是的,为了方便。 OuterClass 真的很简单,只有复杂的部分在构建。我不想要OuterClass 中不必要的字段和方法。
  • 我不明白这一点。要么使用构建器模式,要么使用工厂模式。这是两者的混淆。
  • 这不是工厂模式的工作吗?
  • 添加内部类及其构造函数可以做哪些外部类不能做的事情?

标签: java inner-classes construction


【解决方案1】:

在我看来,你试图重新发现builder pattern :)。您已经非常接近它了,但是如果您将构造函数更改为仅设置单个字段而不是创建整个对象会更好。

创建构建器可能会导致效率降低(必须保留 jvm 中的额外内存),但它可以大大减少您必须创建的不同参数化构造器的数量 - 这样代码会更清晰。修改代码以实现构建器范例是值得考虑的,但最终决定权取决于您。

【讨论】:

  • 在我看来ConstructClass的构造器对于builder来说太简单了。
  • 建造者?哪一条路? builder如何要求jvm内存预留?
  • @Val:因为你需要一个额外的对象。
  • @OliCharlesworth 你是对的,你需要额外的 20 字节(不是千字节,不是兆字节,不是千兆字节,简单字节)的额外内存。使用默认 JVM 设置,这几乎是负担不起的。你是对的,你需要预留额外的内存。
  • @Val:当然可以,但是如果您要构建(比如说)数百万个对象,那就会加起来。
猜你喜欢
  • 2013-03-23
  • 2014-12-12
  • 1970-01-01
  • 1970-01-01
  • 2019-05-25
  • 2016-07-31
  • 2013-02-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多