Factory Functions
Qué son las Factory Functions?
Nota: No confundir con el Factory Method Pattern.
Son funciones que crean y retornan objetos. Diseñadas para crear repetidamente objetos de una clase particular. Reemplaza declaraciones múltiples de objetos con una estructura similar. Lo que permite código más redundante.
Ejemplo sin Factory Function
let car1 = {
name: 'Ford',
model: 'Mustang',
year: 1969,
run() {
return `${this.name} ${this.model} ${this.year} started.`
}
}
let car2 = {
name: 'Chevy',
model: 'Camaro',
year: 1970,
run() {
return `${this.name} ${this.model} ${this.year} started.`
}
}
Ejemplo con Factory Function
function carFactory(name, model, year) {
return {
name,
model,
year,
run() {
return `${this.name} ${this.model} ${this.year} started.`
}
}
}
let car1 = carFactory('Ford', 'Mustang', 1969);
let car2 = carFactory('Chevy', 'Camaro', 1970);
car1.run(); // Ford Mustang 1969 started.
car2.run(); // Chevy Camaro 1970 started.
Cuáles son los cuidados que hay que tener al usar Factory Functions?
- El comportamiento de
this
es diferente en Factory Functions. - No se puede usar
new
en Factory Functions. Por que no son clases. - Son mas lentas que las clases.
- En algunos ejemplos las clases son 2 veces más rápidas. Pero en la práctica durante la creación de 10000+ objetos la diferencia es de 2ms. 🤷🏻♂️
- No son tan poderosas y universales como las clases.
Cuáles son las ventajas de usar Factory Functions?
- Fáciles de escribir y expandir.
- Fáciles de leer y mantener.
- Pueden ser mas intuitivas.
- Son alternativas a las clases.
Cuándo usar Factory Functions?
- Encapsular la creación de objetos que son creados repetidamente.
- Cuando la estructura y la funcionalidad del programa es simple.
- Estas funciones son robustas y confiables.
- No se necesita utilizar herencia de clases.
- Cuando se necesita suficiente flexibilidad para la optimización.
Ejemplo de Factory Functions no robusta
function carFactory(descriptor) {
return {
...descriptor,
run() {
return `${this.name} ${this.model} ${this.year} started.`
}
}
}
let car1 = carFactory({
brand: 'Ford',
version: 'Mustang',
builtIn: 1969
});
car1.run(); // undefined undefined undefined started.
Resumen
Factory Function |
---|
No son una estrategia o un patron de desarrollo de Software |
Son una alternativa simple a las clases |
Son una forma sencilla de crear múltiples objetos |