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.
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.`
}
}
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.
- 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.
- Fáciles de escribir y expandir.
- Fáciles de leer y mantener.
- Pueden ser mas intuitivas.
- Son alternativas a las clases.
- 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.
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.
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 |