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