有效的java说"考虑提供静态工厂方法而不是构造函数"
如果你有
class A {
public static A getInstance() {
return new A();
}
}
Run Code Online (Sandbox Code Playgroud)
为A类提供此方法是否有意义,而不是在代码中调用new A().
Pri*_*ine 18
对于上面的示例,提供静态构造函数没有多大意义.通常,当您提供静态构造函数时,您应该将普通构造函数设为私有.否则,仍然可以使用普通构造函数创建实例.
当你可以使用静态工厂方法时,我试着用另一个例子解释这里.其中一个优点是,您可以为工厂方法提供可理解的名称.
class Complex {
public static Complex fromCartesian(double real, double imag) {
return new Complex(real, imag);
}
public static Complex fromPolar(double modulus, double angle) {
return new Complex(modulus * cos(angle), modulus * sin(angle));
}
private Complex(double a, double b) {
//...
}
}
Complex c = Complex.fromPolar(1, pi)
Run Code Online (Sandbox Code Playgroud)
或者另一个例子是Singleton模式.在那里你不能只提供一个实例.因此,这就是为什么你将构造函数设为私有并创建一个自己的getInstance方法的原因,你确保只有一个实例可用.
public class Singleton {
private volatile static Singleton singleton;
private Singleton() {
}
// synchronized keyword has been removed from here
public static Singleton getSingleton() {
if(singleton==null) {
synchronized(Singleton.class){
if(singleton == null) {
singleton = new Singleton();
}
}
}
return singleton;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14105 次 |
| 最近记录: |