java为什么使用getInstance 1 年,4 月 Questions & Answers 1761 许多公开可用的JavaAPI似乎使用getInstance来生成和返回对象。我很好奇为什么会这样——为什么不直接使用默认/参数化构造函数呢 是否有相关的设计模式
# 1 楼答案 它与Singleton Pattern关联 很多时候还有Factory Methods可以帮助您创建对象 例如:Boolean.parseBoolean("true"); 工厂方法的优点是它们比一系列构造函数更详细、更容易掌握
# 3 楼答案 “为什么不改用默认/参数化构造函数呢?”因为在调用构造函数时,要确保单例模式约束只有一个实例已经太晚了。关键是对单个实例进行控制访问,避免多个实例。唯一的方法是使用访问修饰符来阻止构造函数被访问
# 4 楼答案 为了省去你查找具体原因的麻烦 这是工厂方法模式的一个例子。使用它的最常见原因是: 如果构造过于复杂,无法在构造函数中处理 在施工中,如果不需要,则需要采取行动 建造师 将产品类型(“接口”)与实际实现(“类”)分离李> 出于性能或架构方面的原因,例如在构建时执行部分专业化 为了清晰/可读性 这些原因之间有些重叠。事实上,这四种方法通常都适用。部分专门化(4)几乎需要类型和实现的解耦(3)
# 5 楼答案 另一个示例(单例或多例模式除外)是,如果您需要在构造函数中执行通常不推荐的操作,例如注册侦听器或启动线程: class Whatever { private Whatever() {} //private constructor public Whatever getInstance() { Whatever w = new Whatever(); startSomeThread(); return w; } }
# 1 楼答案
它与Singleton Pattern关联
很多时候还有Factory Methods可以帮助您创建对象
例如:
Boolean.parseBoolean("true");
工厂方法的优点是它们比一系列构造函数更详细、更容易掌握
# 2 楼答案
是的。。。。它与工厂模式和单例模式都关联。Factory模式用于将对象创建逻辑与业务逻辑解耦,Singleton模式用于在整个应用程序中仅维护对象的单个实例
# 3 楼答案
“为什么不改用默认/参数化构造函数呢?”因为在调用构造函数时,要确保单例模式约束只有一个实例已经太晚了。关键是对单个实例进行控制访问,避免多个实例。唯一的方法是使用访问修饰符来阻止构造函数被访问
# 4 楼答案
为了省去你查找具体原因的麻烦
这是工厂方法模式的一个例子。使用它的最常见原因是:
这些原因之间有些重叠。事实上,这四种方法通常都适用。部分专门化(4)几乎需要类型和实现的解耦(3)
# 5 楼答案
另一个示例(单例或多例模式除外)是,如果您需要在构造函数中执行通常不推荐的操作,例如注册侦听器或启动线程:
# 6 楼答案
我建议阅读Joshua Bloch的“有效Java”,第1项“考虑静态工厂方法而不是构造函数”。他领导了许多Java平台特性的设计和实现,他知道为什么