Volver a la página principal
jueves 31 octubre 2024
7

Cómo usar factory constructors en Dart

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.

¿Qué es un 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:

  • Implementar el patrón singleton, asegurando que solo exista una instancia de la clase.
  • Reutilizar instancias basadas en ciertos criterios.
  • Transformar o manipular datos antes de crear una instancia.

Ejemplo de uso de 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.

Uso de 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
}

Ventajas de los factory constructors

  • Optimización de recursos: Permiten controlar la cantidad de instancias creadas.
  • Versatilidad: Facilitan la implementación de patrones como el singleton o fábrica.
  • Validación previa: Se pueden agregar condiciones para devolver distintas instancias según ciertos criterios.

Referencias

Para más detalles sobre los factory constructors en Dart, consulta la documentación oficial de Dart.

Etiquetas:
dart
Compartir:
Creado por:
Author photo

Jorge García

Fullstack developer