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.