Diferencia entre constructor y método de fábrica estática en Java

Siempre que estemos creando un objeto, se ejecutará algún fragmento de código para realizar la inicialización de ese objeto. Este fragmento de código no es más que un constructor, por lo tanto, el propósito principal del constructor es realizar la inicialización de un objeto pero no crear un objeto. Repasemos el conjunto básico de reglas para escribir un constructor. Son los siguientes:

  1. El nombre de la clase y el nombre del constructor deben ser iguales.
  2. El concepto de tipo de devolución no es aplicable para el constructor, ni siquiera para el vacío. Por error, si intentamos declarar el tipo de retorno para el constructor, no obtendremos un error de tiempo de compilación porque el compilador lo trata como un método.
  3. Los únicos modificadores aplicables para el constructor son public, private, protected y default. Si estamos tratando de usar cualquier otro modificador, obtendremos un error en tiempo de compilación que dice que el modificador nombre_del_modificador no está permitido aquí.

Constructor predeterminado 

Un compilador es responsable de generar el constructor predeterminado pero no JVM. Si no estamos escribiendo ningún constructor, solo el compilador generará el constructor predeterminado, es decir, si estamos escribiendo al menos un constructor, por lo tanto, cada clase en Java puede contener un constructor, puede ser un constructor predeterminado generado por un compilador o un constructor personalizado proporcionado explícitamente por el programador pero no ambos simultáneamente.

El prototipo del constructor predeterminado es el siguiente:

  • Siempre es un constructor sin argumentos.
  • El modificador de acceso del constructor predeterminado es exactamente el mismo que el modificador de acceso de la clase.
  • Contiene solo una línea super(), es una llamada sin argumentos al constructor de la superclase.

Métodos de fábrica estática

Al usar un nombre de clase si estamos llamando a un método y si ese método devuelve el mismo objeto de clase, ese tipo de método se llama método de fábrica estático. Los métodos de fábrica estáticos son métodos que devuelven una instancia de la clase nativa. El método de fábrica estático tiene nombres que aclaran el código, a diferencia de los constructores. En el método de fábrica estático, no necesitamos crear un nuevo objeto en cada invocación, es decir, el objeto se puede almacenar en caché y reutilizar si es necesario. También podemos devolver el subtipo de su tipo de retorno. 

La primera línea dentro de cada constructor debe ser super() o this() y si no estamos escribiendo nada, el compilador siempre colocará super()

Ejemplo: 

Java

// Java Program to showcase Difference Between
// Constructor and Static Factory method
 
// Importing all utility classes from
// java.util package
// Importing all input output classes
import java.io.*;
import java.util.*;
 
// Main class
// To find out complex number
public final class GFG {
 
    // Method 1
    // Static factory method returns an object of this
    // class.
    public static GFG valueOf(float real, float imaginary)
    {
        return new GFG(real, imaginary);
    }
 
    // Caller cannot see this private constructor.The only
    // way to build a GFG is by calling the static factory
    // method.
 
    // Constructor
    private GFG(float real, float imaginary)
    {
 
        // This keyword refers to current object itself
        this.real = real;
        this.imaginary = imaginary;
    }
 
    private float real;
    private float imaginary;
 
    // Method 2
    // Main driver method
    public static void main(String[] args)
    {
        // Creating an object of GFG and
        // calling an static factory method valueOf()
        GFG n = GFG.valueOf(2, 4);
 
        // Print and display the complex number
        System.out.println(n.real + "+" + n.imaginary
                           + "i");
    }
}

Producción:

Por lo tanto, del artículo anterior, podemos concluir claramente las diferencias entre ellos, que son las siguientes:

                        Constructor                               método de fábrica estática
El constructor no tiene un nombre significativo, por lo que siempre se restringió a la convención de nomenclatura estándar   El método de fábrica estático puede tener un nombre significativo, por lo que podemos transmitir explícitamente lo que hace este método. 
Los constructores no pueden tener ningún tipo de retorno, ni siquiera nulo. Los métodos de fábrica estáticos pueden devolver el mismo tipo que implementa el método, un subtipo y también primitivos. 
Dentro del constructor, solo podemos realizar la inicialización de objetos.  Dentro del método de fábrica estático que no sea la inicialización, si queremos realizar alguna actividad para cada creación de objeto, como aumentar el valor de conteo para cada creación de objeto, podemos hacerlo en el método de fábrica estático.  
Constructor siempre crea un nuevo objeto dentro del montón, por lo que no es posible devolver una instancia almacenada en caché de la clase desde un constructor.  Pero los métodos de fábrica pueden aprovechar el almacenamiento en caché, es decir, podemos devolver la misma instancia de la clase Inmutable del método de fábrica en lugar de crear siempre un nuevo objeto. 
La primera línea dentro de cada constructor debe ser super() o this() Pero dentro del método de fábrica, no es necesario que la primera línea sea super() o this()

Publicación traducida automáticamente

Artículo escrito por mroshanmishra0072 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *