Buscar..


Método de fábrica estática

Podemos proporcionar un nombre significativo para nuestros constructores.

Podemos proporcionar a varios constructores el mismo número y tipo de parámetros, algo que, como vimos anteriormente, no podemos hacer con los constructores de clases.

public class RandomIntGenerator {
    private final int min;
    private final int max;
 
    private RandomIntGenerator(int min, int max) {
        this.min = min;
        this.max = max;
    }
     
    public static RandomIntGenerator between(int max, int min) {
        return new RandomIntGenerator(min, max);
    }
     
    public static RandomIntGenerator biggerThan(int min) {
        return new RandomIntGenerator(min, Integer.MAX_VALUE);
    }
     
    public static RandomIntGenerator smallerThan(int max) {
        return new RandomIntGenerator(Integer.MIN_VALUE, max);
    }
 
    public int next() {...}
}

Ocultar acceso directo al constructor.

Podemos evitar proporcionar acceso directo a constructores que hacen un uso intensivo de recursos, como para bases de datos. clase pública DbConnection {private static final int MAX_CONNS = 100; private static int totalConnections = 0;

   private static Set<DbConnection> availableConnections = new HashSet<DbConnection>();

   private DbConnection()
   {
     // ...
     totalConnections++;
   }

   public static DbConnection getDbConnection()
   {
     if(totalConnections < MAX_CONNS)
     {
       return new DbConnection();
     }

     else if(availableConnections.size() > 0)
     {
         DbConnection dbc = availableConnections.iterator().next();
         availableConnections.remove(dbc);
         return dbc;
     }

     else {
       throw new NoDbConnections();
     }
   }

   public static void returnDbConnection(DbConnection dbc)
   {
     availableConnections.add(dbc);
     //...
   }
}

Método de fábrica estático C #

El método estático de fábrica es una variación del patrón de método de fábrica . Se utiliza para crear objetos sin tener que llamar al constructor.

Cuándo usar el método de fábrica estática

  • si desea dar un nombre significativo al método que genera su objeto.
  • Si desea evitar la creación de objetos demasiado complejos, consulte Tuple Msdn .
  • Si desea limitar el número de objetos creados (almacenamiento en caché)
  • si desea devolver un objeto de cualquier subtipo de su tipo de retorno.

Hay algunas desventajas como

  • Las clases sin un constructor público o protegido no pueden inicializarse en el método de fábrica estática.
  • Los métodos estáticos de fábrica son como los métodos estáticos normales, por lo que no se distinguen de otros métodos estáticos (esto puede variar de IDE a IDE)

Ejemplo

Pizza.cs

public class Pizza
{
    public int SizeDiameterCM
    {
        get;
        private set;
    }
         
    private Pizza()
    {
        SizeDiameterCM = 25;
    }

    public static Pizza GetPizza()
    {
        return new Pizza();
    }

    public static Pizza GetLargePizza()
    {
        return new Pizza()
        {
            SizeDiameterCM = 35
        };
    }

    public static Pizza GetSmallPizza()
    {
        return new Pizza()
        {
            SizeDiameterCM = 28
        };
    }

    public override string ToString()
    {
        return String.Format("A Pizza with a diameter of {0} cm",SizeDiameterCM);
    }
}

Programa.cs

class Program
{
    static void Main(string[] args)
    {
        var pizzaNormal = Pizza.GetPizza();
        var pizzaLarge = Pizza.GetLargePizza();
        var pizzaSmall = Pizza.GetSmallPizza();


        String pizzaString = String.Format("{0} and {1} and {2}",pizzaSmall.ToString(), pizzaNormal.ToString(), pizzaLarge.ToString());
        Console.WriteLine(pizzaString);
    }
}

Salida

Una pizza con un diámetro de 28 cm y una pizza con un diámetro de 25 cm y una pizza con un diámetro de 35 cm



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow