Para su ejemplo anterior, no tiene mucho sentido proporcionar un constructor estático. Y normalmente cuando proporcionas un constructor estático debes hacer que el constructor normal sea privado. De lo contrario, aún es posible crear una instancia con el constructor normal.
trato de explicar aquí con otro ejemplo, cuando se podría utilizar métodos de fábrica estáticas. Una de las ventajas es que puede dar a los métodos de fábrica los nombres comprensibles.
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)
Otro ejemplo sería el patrón Singleton . Ahí quieres proporcionar solo una instancia. Así que esta es la razón por la cual usted hace el constructor privado y crear un método getInstance propia, donde se asegura de que siempre hay sólo una instancia disponible.
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;
}
}
Factory Method Pattern Wikipedia
Posible duplicado: http://stackoverflow.com/questions/929021/what-are-static-factory-methods-in-java – oksayt
+1 para leer Java efectivo – flash