很多公开的Java API似乎都使用
getInstance
来生成和返回对象。我很好奇为什么会这样,为什么不直接使用默认/参数化构造函数呢?是否有相关的设计模式?getInstance
来生成和返回对象。我很好奇为什么会这样,为什么不直接使用默认/参数化构造函数呢?是否有相关的设计模式?我建议阅读 Joshua Bloch 的 "Effective Java",其中第1条是"考虑使用静态工厂方法代替构造函数"。他领导了许多 Java 平台特性的设计和实现,他知道为什么。
除了单例或多例模式之外,另一个例子是如果你需要在构造函数中执行通常不推荐的操作,比如注册监听器或启动线程:
class Whatever {
private Whatever() {} //private constructor
public Whatever getInstance() {
Whatever w = new Whatever();
startSomeThread();
return w;
}
}
是的...它与工厂模式和单例模式都有关联。工厂模式用于将对象创建逻辑与业务逻辑解耦,而单例模式用于在整个应用程序中仅维护一个对象实例。
为了让您省去查找具体原因的麻烦...
这是工厂方法模式的一个案例。使用它最常见的原因有:
这些原因之间存在一些重叠。实际上,通常所有四个都适用。部分特化(4)几乎需要解耦类型和实现(3)。