Regístrate para acceder a más de 15 cursos gratuitos de programación con un simulador

Fábrica (Patrón) JS: Polimorfismo

La aplicación del polimorfismo de subtipos no elimina por completo las estructuras condicionales (excepto en algunos casos de despacho, como por clave o nombre de archivo). En la mayoría de los casos, la estructura condicional se reduce a la selección de la implementación adecuada, y luego esta implementación se utiliza dentro de una función polimórfica de manera directa, sin condiciones. En la lección anterior, vimos un ejemplo de una función que selecciona la implementación de una estrategia basada en la edad del usuario y la devuelve.

const elegirEstrategiaSeguroDeCostos = (usuario) => {
  if (usuario.getEdad() < 18) {
    return new MenorDe18();
  } else if (/* ... */) {
    // algún código
  }
}

La función que elige la clase necesaria, crea un objeto y lo devuelve se llama fábrica (más precisamente, un método de fábrica). Una fábrica puede ser implementada de cualquier manera, incluyendo todo lo que se ha discutido en este curso.

En general, se llama fábrica a cualquier cosa que cree objetos o colecciones de objetos. No necesariamente tienen que ser clases diferentes, una clase puede ser la misma, pero el proceso de creación puede incluir algunos cálculos previos. En proyectos reales, las fábricas pueden ser bastante grandes.

Las fábricas a menudo se implementan como clases con un método estático llamado factory. Por lo general, las fábricas no crean objetos en sí, ya que no son una abstracción de datos y no tiene sentido reemplazar su significado, de lo contrario, se obtendría un reemplazo de reemplazo.

export default class {
  static factory(/* parámetros */) {
    // código de la fábrica
  }
}

Despacho de clases

JavaScript permite crear objetos utilizando una referencia a una clase.

const nombreClase = Aplicacion;
const app = new nombreClase();

Esta sintaxis abre un amplio espacio para el despacho. Por ejemplo, en algunas situaciones, es posible evitar completamente las estructuras condicionales:

import PoliticaGerente from './policies/PoliticaGerente.js';
import PoliticaTrabajador from './policies/PoliticaTrabajador.js';

// Policy (Política) es el nombre que generalmente se utiliza para la autorización, es decir, 
//los sistemas de verificación de permisos de acceso
const mapeo = {
  gerente: PoliticaGerente,
  trabajador: PoliticaTrabajador,
};

const obtenerPoliticaUsuario = (usuario) => {
  const nombreClase = mapeo[usuario.getTipo()];
  return new nombreClase();
};

Para acceder completo a curso necesitas un plan básico

El plan básico te dará acceso completo a todos los cursos, ejercicios y lecciones de Códica, proyectos y acceso de por vida a la teoría de las lecciones completadas. La suscripción se puede cancelar en cualquier momento.

Obtener acceso
130
cursos
1000
ejercicios
2000+
horas de teoría
3200
test

Obtén acceso

Cursos de programación para principiantes y desarrolladores experimentados. Comienza tu aprendizaje de forma gratuita

  • 130 cursos, 2000+ horas de teoría
  • 1000 ejercicios prácticos en el navegador
  • 360 000 estudiantes
Al enviar el formulario, aceptas el «Política de privacidad» y los términos de la «Oferta», y también aceptas los «Términos y condiciones de uso»

Nuestros graduados trabajan en empresas como:

Bookmate
Health Samurai
Dualboot
ABBYY