Factory

El patrón de diseño Factory Method (Método de Fábrica) es un patrón creacional que define una interfaz para crear un objeto, pero deja que las subclases decidan qué clase concreta instanciar. Esto permite que una clase delegue la creación de objetos a sus subclases.

Un ejemplo común del patrón Factory Method es una fábrica de vehículos. Tenemos una interfaz llamada Vehicle que define métodos como drive() y stop(). Luego, tenemos varias subclases que implementan esta interfaz, como Car, Truck, Motorcycle, etc.

Ahora, en lugar de que una clase cliente (por ejemplo, un concesionario de vehículos) cree directamente un objeto Car, Truck o Motorcycle, puede utilizar un método de fábrica que decida qué tipo de vehículo instanciar. Por ejemplo:

typescriptCopy codeinterface Vehicle {
  drive(): void;
  stop(): void;
}

class Car implements Vehicle {
  drive() {
    console.log('Car is driving...');
  }

  stop() {
    console.log('Car stopped.');
  }
}

class Truck implements Vehicle {
  drive() {
    console.log('Truck is driving...');
  }

  stop() {
    console.log('Truck stopped.');
  }
}

class VehicleFactory {
  createVehicle(type: string): Vehicle {
    if (type === 'car') {
      return new Car();
    } else if (type === 'truck') {
      return new Truck();
    } else {
      throw new Error('Invalid vehicle type.');
    }
  }
}

// Uso de la fábrica
const factory = new VehicleFactory();
const car = factory.createVehicle('car');
car.drive(); // Output: Car is driving...
car.stop(); // Output: Car stopped.

const truck = factory.createVehicle('truck');
truck.drive(); // Output: Truck is driving...
truck.stop(); // Output: Truck stopped.

En este ejemplo, VehicleFactory es la fábrica que decide qué tipo de vehículo crear. La clase cliente solo necesita especificar el tipo de vehículo que desea y la fábrica se encarga del resto. Esto hace que el código sea más flexible y fácil de mantener, ya que la lógica de creación está encapsulada en la fábrica.

Last updated