Skip to content

Instantly share code, notes, and snippets.

@sauloco
Created November 16, 2021 13:08
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sauloco/d24b7d1aedd2ab29a1cefef97404d890 to your computer and use it in GitHub Desktop.
Save sauloco/d24b7d1aedd2ab29a1cefef97404d890 to your computer and use it in GitHub Desktop.
Que son las Factory Functions y como usarlas

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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment