Los constructores de fábrica o factory constructors en Dart permiten controlar la creación de instancias de una clase, devolviendo una instancia existente o una nueva según sea necesario. Este tipo de constructor es ideal cuando se requiere lógica adicional al instanciar objetos, como implementar patrones de diseño o manejar cachés de instancias.
factory constructor en Dart?
Un factory constructor en Dart es un constructor especial que utiliza la palabra clave factory. A diferencia de los constructores regulares, un factory constructor no necesariamente crea una nueva instancia de la clase, sino que puede devolver una instancia preexistente o crear una nueva solo cuando sea necesario.
Los constructores de fábrica son útiles para:
factory constructor en Dart
Aquí se muestra un ejemplo básico de un factory constructor para implementar el patrón singleton, en el cual solo se crea una instancia única de la clase Singleton:
class Singleton {
static final Singleton _instancia = Singleton._interno();
// Constructor nombrado privado
Singleton._interno();
// Constructor de fábrica
factory Singleton() {
return _instancia;
}
}
void main() {
var instancia1 = Singleton();
var instancia2 = Singleton();
print(identical(instancia1, instancia2)); // Salida: true
}
En este ejemplo:
Singleton._interno() es un constructor privado que crea una instancia.
factory Singleton() devuelve siempre la misma instancia, garantizando que instancia1 e instancia2 sean la misma.
factory constructor con lógica adicional
En el siguiente ejemplo, el factory constructor devuelve una instancia específica de la clase Producto en función de una condición. Si el nombre del producto es "Especial", crea una instancia especial; de lo contrario, crea una instancia regular.
class Producto {
final String nombre;
Producto._interno(this.nombre);
factory Producto(String nombre) {
if (nombre == "Especial") {
return Producto._interno("Producto Especial");
} else {
return Producto._interno(nombre);
}
}
}
void main() {
var producto1 = Producto("Especial");
var producto2 = Producto("Regular");
print(producto1.nombre); // Salida: Producto Especial
print(producto2.nombre); // Salida: Regular
}
factory constructors
Para más detalles sobre los factory constructors en Dart, consulta la documentación oficial de Dart.
Jorge García
Fullstack developer