No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Implementación de Factory en JS

9/27
Recursos

Aportes 8

Preguntas 3

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

¡Hola! Creería que a pesar que una clase abstracta pura y una interfaz puedan llegar a ser similares, hay algo importante a tener en cuenta y es que una clase abstracta pura se utiliza para definir una clase base de la cuál cada una de las subclases tienen relación, por otro lado, una interfaz se utiliza para definir un conjunto de métodos que deben ser implementados por diferentes clases y puede que exista una relación entre las clases que implementen esta interfaz como puede que sean clases no relacionadas de alguna forma, por lo que si usamos una clase abstracta pura o una interfaz variaría en el diseño y requerimientos de la aplicación.

class Animal {
  comer() {}
  dormir() {}
}

class Ave extends Animal {
  comer() {
    console.log("El ave está comiendo");
  }
  dormir() {
    console.log("El ave está durmiendo");
  }
}

const ave1 = new Ave();
ave1.comer();
/*la clase "Ave" extiende la clase base "Animal" y redefine los métodos "comer" y "dormir" para que muestren un mensaje específico para las aves. Luego, se crea una instancia de "Ave" y se llama al método "comer"*/

¡Hola!

Creería que al crear la función createFactory estamos aplicando el principio O de SOLID, en el que estamos abiertos a la extensión y cerrados a la modificación, en la que si queremos añadir un tipo de carro, solamente se debe de modificar la función createFactory sin modificar el código base de cada una de las clases de los carros, ¡Gracias por el ejemplo, Dani!

interface BaseCar {
    showCost(): void
}

interface CarFactory {
    makeCar(): BaseCar
}

class RhinoCar implements BaseCar {
    public showCost(): void{
        console.log('Rhino Car Cost: $ 15.000')
    }
}

class MastodonCar implements BaseCar {
    public showCost(): void {
        console.log('Mastodon Car Cost: $ 20.000')
    }
}

class RhinoFactory implements CarFactory {
    public makeCar(): BaseCar {
        return new RhinoCar()
    }
}

class MastodonFactory implements CarFactory {
    public makeCar(): BaseCar {
        return new MastodonCar()
    }
}

function appFactory(factory: CarFactory): void {
    const car = factory.makeCar()
    car.showCost()
}

function createFactory(type: 'rhino' | 'mastodon'): CarFactory {
    const factories = {
        rhino: RhinoFactory,
        mastodon: MastodonFactory
    }

    const Factory = new factories[type]
    return Factory
}

appFactory(createFactory('rhino'))
appFactory(createFactory('mastodon'))
lo de las referencias me parecio un detalle muy elegante, lo seguire usando en mis codigos.
\#### Factory \> Este patrón consiste en definir clases tanto para las (fabricas especificas para instanciar productos específicos::fabricas) como para los productos las cuales implementan interfaces que son contratos genéricos para cada uno de las fabricas y productos. ```java public class Main {     public static void main(String\[] args) {         Factory factoryA = new ConcreteFactoryA();         Factory factoryB = new ConcreteFactoryB();         Product productA = factoryA.makeProduct();         Product productB = factoryB.makeProduct();         System.out.println(productA.doProductOperation());         System.out.println(productB.doProductOperation());     } } interface Product {     String doProductOperation(); } interface Factory {     Product makeProduct(); } class ProductA implements Product {     @Override     public String doProductOperation() {         return "making a ProductA product...";     } } class ProductB implements Product {     @Override     public String doProductOperation() {         return "making a ProductB product...";     } } class ConcreteFactoryA implements Factory {     @Override     public Product makeProduct() {         return new ProductA();     } } class ConcreteFactoryB implements Factory {     @Override     public Product makeProduct() {         return new ProductB();     } } ```

Estas clases están geniales! Hace meses estuve leyendo sobre patrones de diseño, y en ese momemto, me pareciaron temas muy crípticos. Pero con los ejemplos y las explicaciones, me están resultando muy digeribles.

Emocionado por continuar con las siguientes clases-.

La abstracción createFactory nos ofrece ambos beneficios de extensibilidad y reusabilidad. Depende de nosotros si vale la pena implementarlo dados nuestros requerimientos 🧐