Patrón Abstract Factory
¿Qué es el Patrón Abstract Factory?
El Abstract Factory es un patrón de diseño creacional que proporciona una interfaz para crear familias de objetos relacionados sin especificar las clases concretas. Es útil cuando una aplicación debe ser independiente de cómo se crean y componen los objetos.
Código de Ejemplo en JavaScript
class Car {
constructor() {
this.type = "Car";
}
info() {
console.log("Este es un Carro.");
}
}
class Truck {
constructor() {
this.type = "Truck";
}
info() {
console.log("Este es un Camión.");
}
}
class ElectricCar {
constructor() {
this.type = "Electric Car";
}
info() {
console.log("Este es un Carro Eléctrico.");
}
}
class ElectricTruck {
constructor() {
this.type = "Electric Truck";
}
info() {
console.log("Este es un Camión Eléctrico.");
}
}
// Abstract Factory
class VehicleFactory {
createCar() {}
createTruck() {}
}
// Concrete Factory para Vehículos a Combustión
class CombustionVehicleFactory extends VehicleFactory {
createCar() {
return new Car();
}
createTruck() {
return new Truck();
}
}
// Concrete Factory para Vehículos Eléctricos
class ElectricVehicleFactory extends VehicleFactory {
createCar() {
return new ElectricCar();
}
createTruck() {
return new ElectricTruck();
}
}
// Uso del Abstract Factory
function vehicleClient(factory) {
const car = factory.createCar();
const truck = factory.createTruck();
car.info();
truck.info();
}
const combustionFactory = new CombustionVehicleFactory();
const electricFactory = new ElectricVehicleFactory();
console.log("Vehículos a Combustión:");
vehicleClient(combustionFactory);
console.log("\nVehículos Eléctricos:");
vehicleClient(electricFactory);
Casos de Uso
- Creamos múltiples productos relacionados, como componentes de interfaz de usuario para distintas plataformas (Windows/Mac).
- Gestión de familias de productos en aplicaciones multiplataforma o multilenguaje.
- Creación de modelos para **bases de datos** con diferentes motores (SQL, NoSQL).
Patrones Relacionados
- Factory Method: Crea un solo tipo de objeto.
- Builder: Construye objetos paso a paso.
- Prototype: Clona objetos existentes.