有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java为什么使用getInstance

许多公开可用的JavaAPI似乎使用getInstance来生成和返回对象。我很好奇为什么会这样——为什么不直接使用默认/参数化构造函数呢

是否有相关的设计模式


共 (6) 个答案

  1. # 1 楼答案

    它与Singleton Pattern关联

    很多时候还有Factory Methods可以帮助您创建对象

    例如:Boolean.parseBoolean("true");

    工厂方法的优点是它们比一系列构造函数更详细、更容易掌握

  2. # 2 楼答案

    是的。。。。它与工厂模式和单例模式都关联。Factory模式用于将对象创建逻辑与业务逻辑解耦,Singleton模式用于在整个应用程序中仅维护对象的单个实例

  3. # 3 楼答案

    “为什么不改用默认/参数化构造函数呢?”因为在调用构造函数时,要确保单例模式约束只有一个实例已经太晚了。关键是对单个实例进行控制访问,避免多个实例。唯一的方法是使用访问修饰符来阻止构造函数被访问

  4. # 4 楼答案

    为了省去你查找具体原因的麻烦

    这是工厂方法模式的一个例子。使用它的最常见原因是:

    1. 如果构造过于复杂,无法在构造函数中处理
    2. 在施工中,如果不需要,则需要采取行动 建造师
    3. 将产品类型(“接口”)与实际实现(“类”)分离
    4. 出于性能或架构方面的原因,例如在构建时执行部分专业化
    5. 为了清晰/可读性

    这些原因之间有些重叠。事实上,这四种方法通常都适用。部分专门化(4)几乎需要类型和实现的解耦(3)

  5. # 5 楼答案

    另一个示例(单例或多例模式除外)是,如果您需要在构造函数中执行通常不推荐的操作,例如注册侦听器或启动线程:

    class Whatever {
    
        private Whatever() {} //private constructor
        public Whatever getInstance() {
            Whatever w = new Whatever();
            startSomeThread();
            return w;
        }
    }
    
  6. # 6 楼答案

    我建议阅读Joshua Bloch的“有效Java”,第1项“考虑静态工厂方法而不是构造函数”。他领导了许多Java平台特性的设计和实现,他知道为什么