¿Qué son los métodos de fábrica estáticos?

¿Qué es un método "static factory"?

Solución

Evitamos proporcionar acceso directo a las conexiones de bases de datos porque consumen muchos recursos. Así que usamos un método de fábrica estático getDbConnection que crea una conexión si estamos por debajo del límite. Si no, intenta proporcionar una conexión "libre", fallando con una excepción si no hay ninguna.

public class DbConnection{
   private static final int MAX_CONNS = 100;
   private static int totalConnections = 0;

   private static Set availableConnections = new HashSet();

   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);
     //...
   }
}
Comentarios (5)
  • tienen nombres, a diferencia de los constructores, lo que puede clarificar el código.
  • no necesitan crear un nuevo objeto en cada invocación - los objetos pueden ser almacenados en caché y reutilizados, si es necesario.
  • pueden devolver un subtipo de su tipo de retorno - en particular, pueden devolver un objeto cuya clase de implementación es desconocida para el invocador. Esta es una característica muy valiosa y ampliamente utilizada en muchos frameworks que utilizan interfaces como tipo de retorno de métodos estáticos de fábrica.

dehttp://www.javapractices.com/topic/TopicAction.do?Id=21

Comentarios (0)

Un método de fábrica es un método que abstrae la instanciación de un objeto. En general, las fábricas son útiles cuando se sabe que se necesita una nueva instancia de una clase que implementa alguna interfaz, pero no se conoce la clase que la implementa.

Esto es útil cuando se trabaja con jerarquías de clases relacionadas, un buen ejemplo de esto sería un conjunto de herramientas GUI. Podrías simplemente codificar las llamadas a los constructores para implementaciones concretas de cada widget pero si alguna vez quisieras cambiar un toolkit por otro tendrías un montón de sitios que cambiar. Usando una fábrica reduces la cantidad de código que tendrías que cambiar.

Comentarios (2)