JavaScript — Patrones de diseño en JS — Creacional (Parte I)

Mauricio Garcia
3 min readMay 13, 2020

--

Temario

  • Class — Factory Method

i. Class — Factory Method

Este patrón define una interfaz para crear un objeto, pero permite que las subclases decidan qué clase instanciar; básicamente tenemos una clase genérica que delega la instancia a las subclases mediante un constructor virtual.

Es muy común usarlo cuando se necesita administrar colecciones de objetos que son diferentes pero que tienen propiedades o características muy parecidas.

Un ejemplo muy común son las APIS públicas[ref], ya que el cliente solo hace la llamada a dicha API para completar una tarea.

:: Ejemplo

Imaginemos que tenemos los siguientes tipos de transportes:

  • Monocycle (ruedas: 1, tipo: manual)
  • Motorcycle (ruedas: 2, tipo: motor)
  • Car (ruedas: 4, tipo: motor)
  • Trailer (ruedas: 6, tipo: motor)

Sabemos que la clase principal sería Vehicle, y las subclases Monocycle, Motorcycle, Car, Trailer

Tenemos la clase Vehicle

Tenemos las subclases Monocycle, Motorcycle, Car, Trailer

Para no estar instanciando cada una de manera separada, vamos crear la clase VehicleFactory, y dependiendo de los parámetros mandados va a hacer la instancia de objeto.

Entonces el código quedaría de la siguiente manera:

Y para instanciarlo:

— Ejemplo completo

Con este patrón el cliente puede confiar que le va a regresar el vehículo apropiado (de acuerdo a los parámetros) sin tener que instanciar el objeto directamente.

:: Se recomienda usar cuando…

  • La implementación de una interfaz está cambiando constantemente.
  • No sepamos los tipos exactos y las dependencias de objetos con los que el código deba funcionar.
  • La implementación actual no se puede actualizar de manera sencilla y limpia.
  • El cliente necesita extender sus propios componentes.
  • Queremos reutilizar objetos existentes en vez de estarlos construyendo.

:: La ventaja de usarlo…

  • Cumple con el principio de SOLID (Principio de responsabilidad única).
  • Cumple con el principio de SOLID (Abierto / cerrado), ya que podemos meter nuevos tipos sin romper el código existente.

:: La desventaja de usarlo…

  • El código puede volverse confuso al intentar instancias muchos tipos de subclases.

La mayoría de los diseños comienzan usando este patrón (simple y personalizable) y va evolucionando a Abstract Factory, Prototype o Builder (Constructor)

--

--

No responses yet