【发布时间】:2019-11-17 11:31:01
【问题描述】:
当您可以将变量公开并访问实例时,创建getInstance() 有什么意义?
我知道抽象工厂设计模式对工厂来说是有意义的,因为我们在运行时决定我们需要的实现类型。
使用 getInstance():
public class ClientFactory {
private static ClientFactory instance = null;
private ClientFactory() { }
public static synchronized ClientFactory getInstance() {
if ( instance == null ) {
instance = new ClientFactory();
}
return instance;
}
}
公开变量而不是创建实例方法:
public class ClientFactory {
public static final ClientFactory instance = new ClientFactory ();
private ClientFactory() { }
}
我们可以使用ClientFactory.instance.foo();轻松获取访问权限。
【问题讨论】:
-
如果其他类创建了新实例怎么办?
ClientFactory.instance = new ClientFactory();此外,如果某个类将某个来自 ClientFactory 的派生类分配给实例怎么办?ClientFactory.instance = new DerivedClientFactory(); -
不能,构造函数是私有的。
-
啊,我的错……没注意到
-
如果你去公共领域,至少要写成
final(这样没人能惹它)。 -
@Thilo 是的,我错过了。这是
final
标签: java oop design-patterns singleton