当前位置: 首页 > 面试题库 >

静态工厂方法的实际用例?

呼延渝
2023-03-14
问题内容

我熟悉静态工厂方法的概念和好处,如Joshua Bloch的EffectiveJava中所述:

  • 工厂方法具有名称,因此与构造函数不同,您可以拥有多个具有相同签名的工厂方法。
  • 工厂方法不必创建新的对象。他们可以返回先前创建的对象。这对于不可变对象或值对象很有用。
  • 与构造方法不同,工厂方法可以返回其返回类型的任何子类型的对象。

现在,我正在尝试为正在学习Java和OO原理的人员解释静态工厂方法。她从具体场景而不是抽象中学到最好的知识。如果她能看到工作中的模式并解决了一些问题,她就会明白。但是她发现很难阅读上述特征的抽象列表以了解如何应用该模式

您能帮我举一个使用静态工厂方法的实际示例,该示例清楚地说明了它的优点,但仍然很简单,可以向Java入门类中的某人展示?

这个人的确有PL / SQL编程经验,但是从不学习OOP模式


问题答案:

使用javax.swing.BorderFactory所有三个点的例子。

此类用于为摆动对象制作边框。这些边界对象可以轻松地重复使用,并且此工厂方法允许这样做。这是javadoc。该工厂是这三个方面的一个很好的例子:

  • 有多种静态方法,它们的名称不同,例如createEmptyBorder()createEtchedBorder()
  • 这些方法将尽可能返回以前创建的对象。在整个应用程序中经常使用相同的边框。
  • Border 本身实际上是一个接口,因此通过该工厂创建的所有对象实际上都是实现此接口的类。


 类似资料:
  • 在Java中是否有一个静态工厂方法来创建队列? 或 但无法找到对队列(或出队列)进行同样操作的方便方法。我找到的唯一解决办法是:

  • 问题内容: 首先,如果这是一个非常愚蠢的问题,请原谅我,我只是想学习这种语言的核心。我正在阅读《有效的Java》,并且第一章讨论了静态工厂方法与构造方法。他们的利弊。令我困惑的几件事是: 静态工厂方法返回的对象的类是非公共的 -究竟是什么意思? 与构造函数不同,每次调用静态工厂方法都不需要创建新对象 -这是怎么发生的?我仅调用工厂方法来获取新对象,是否将检查方法放入工厂方法中以检查对象是否已存在?

  • 问题内容: 我的应用程序有一个问题,当我登录时,该应用程序崩溃并且出现错误: 我试图弄乱gradle并更改变量。这个问题似乎源于此软件包: 然后,它还引用了以下内容: 这是我的摇篮 关于如何找到纠正错误的方法有任何想法吗? 问题答案: 尝试切换到Java 8兼容性,以对某些库进行适当的除糖处理: 此外,Google JSON API可能更需要。

  • 问题内容: 什么是静态工厂方法? 问题答案: 我们避免直接访问数据库连接,因为它们占用大量资源。因此,如果我们低于限制,我们将使用静态工厂方法来创建连接。否则,它将尝试提供“备用”连接,如果不存在则失败,并显示异常。

  • 问题内容: 如果我正在编写用于创建对象的静态工厂方法,那么如何为该工厂类使用’@Component’批注并指示(带有一些批注)创建该类bean所应使用的静态工厂方法?以下是我的意思的伪代码: 问题答案: 恐怕您目前无法执行此操作。但是,使用Java配置非常简单: 在这种情况下,不需要任何Spring注释。当然,您可以改用优质的XML。

  • 我在读有效的Java课本。第一项是关于使用静态工厂方法而不是公共构造函数。我的疑问是,如果我正在指定我如何在中指定静态工厂方法?因为Java不支持内部的静态方法。教材指定了如何创建包含公共静态工厂方法的不可实例化类。但是这些方法如何访问实现类的私有构造函数呢? 教材中说,如果要定义,请创建一个不可实例化的类,并在该类中包含静态工厂方法。但是类中定义的方法如何访问具体实现的私有构造函数 编辑:-以下