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

何时使用构造函数以及何时使用getInstance()方法(静态工厂方法)?

庄智
2023-03-14
问题内容
  1. 何时以及如何使用构造函数

    Foo bar = new Foo();
    
  2. 以及何时以及如何使用getInstance()(静态工厂方法)

    Foo bar = Foo.getInstance();
    

两者有什么区别?我一直使用构造函数,但是什么时候应该使用getInstance()呢?


问题答案:

每个人似乎都专注于单例,而我认为问题实际上是关于 构造函数与静态工厂方法

这实际上是 项目1:考虑静态工厂方法,而不是 Joshua Bloch 的 Effective Java

的构造函数

项目1:考虑静态工厂方法而不是构造函数

类允许客户端获取其自身实例的通常方法是提供一个公共构造函数。每个程序员的工具箱中都应该包含另一种技术。一个类可以提供一个公共的 静态工厂方法
,该方法只是返回类实例的静态方法。这是来自的一个简单示例Boolean(原始类型的装箱原始类型 boolean)。此方法将布尔基本值转换为
Boolean对象引用:

public static Boolean valueOf(boolean b) {
    return b ? Boolean.TRUE : Boolean.FALSE;
}

请注意,静态工厂方法 与“ 设计模式” [Gamma95,p。1]中的 工厂方法 模式不同。107]。此项中描述的静态工厂方法在“
设计模式”中 没有直接等效的方法。

一个类可以向其客户端提供静态工厂方法,而不是构造方法或为构造方法提供补充。提供静态工厂方法而不是公共构造方法具有优点和缺点。

优点(引用本书):

  • 静态工厂方法的一个优点是,与构造函数不同,它们具有名称。
  • 静态工厂方法的第二个优点是,与构造函数不同,不需要每次调用它们时都创建一个新对象。
  • 静态工厂方法的第三个优点是,与构造函数不同,它们可以返回其返回类型的任何子类型的对象。
  • 静态工厂方法的第四个优点是它们减少了创建参数化类型实例的冗长性。

缺点(仍在引用这本书):

  • 仅提供静态工厂方法的主要缺点是,没有公共或受保护的构造函数的类不能被子类化。
  • 静态工厂方法的第二个缺点是它们不易与其他静态方法区分开。


 类似资料:
  • 问题内容: 有效的Java说“考虑提供静态工厂方法而不是构造函数” 如果你有一个 为类A提供此方法是否有意义,而不是在代码中调用new A()。 问题答案: 请参阅此处以很好地说明您可能要执行此操作的主要原因。综上所述: 命名为“构造函数”。 如果合适,可以返回null。 如果合适,可以返回派生类的实例。 在实例化泛型类型的变量时减少冗长。 我想到了本文没有提及的另一个原因:可以实现有趣的逻辑来避

  • 我在想什么时候使用静态方法?假设我有一个类有几个getter和setter,一两个方法,并且我希望这些方法只能在类的实例对象上调用。这是否意味着我应该使用静态方法? 示例: ...或: 我很困惑!

  • 问题内容: 我们有一个Hibernate / Spring应用程序,它具有以下Spring Bean: 将应用程序连接在一起时,在hibernate实体中使用私有构造函数时,会出现以下错误: 实体是典型的域对象,例如Employee等。 当将构造函数的可见性修改器更改为打包(或公共)时,应用程序运行良好,并且实体存储/加载到数据库中。我们/如何在Spring / Hibernate事务管理中使用私

  • 问题内容: 我想知道何时使用静态方法?假设我有一个带有几个和的类,一个或两个方法,并且我希望这些方法只能在该类的实例对象上调用。这是否意味着我应该使用静态方法? 例如 要么 我很困惑! 问题答案: 一个经验法则:问自己“即使尚未构建Obj,调用此方法是否有意义?” 如果是这样,那肯定是静态的。 因此,在一个类中,Car你可能有一个静态的方法,因为即使没有人制造过汽车,也可能想知道35mpg转换为什

  • 问题内容: 我想知道何时使用静态方法?假设我有一个带有几个getter和setter的类,一个或两个方法,并且我希望这些方法只能在该类的实例对象上调用。这是否意味着我应该使用静态方法? 例如 要么 (这是静态方式吗?) 我很困惑! 问题答案: 一个经验法则:问自己“即使尚未构建Obj,调用此方法是否有意义?” 如果是这样,那肯定是静态的。 因此,在一个类中,你可能有一个静态的方法,因为即使没有人制

  • 问题内容: 我正在学习“ 有效的Java” ,书中并未建议我认为一些标准的东西,例如对象的创建,我的印象是构造函数是最好的方法,书中说我们应该利用在静态工厂方法中,我不能说出一些优点,而在缺点中却有缺点,所以我在问这个问题,这是使用它的好处。 优点: 静态工厂方法的一个优点是,与构造函数不同,它们具有名称。 静态工厂方法的第二个优点是,与构造函数不同,不需要每次调用它们时都创建一个新对象。 静态工