Реализация шаблона проектирования «Фабрика» в TypeScript: подробное руководство

При разработке программного обеспечения шаблоны проектирования играют решающую роль в создании масштабируемого, удобного в обслуживании и гибкого кода. Одним из таких шаблонов является шаблон проектирования «Фабрика», который предоставляет интерфейс для создания объектов без указания их конкретных классов. В этой статье мы рассмотрим различные методы реализации шаблона проектирования Factory с использованием TypeScript, а также приведем примеры кода.

  1. Простой фабричный метод:
    Простой фабричный метод включает в себя один фабричный класс, отвечающий за создание объектов на основе заданного параметра. Вот пример:
class Vehicle {
  constructor(public type: string) {}
}
class VehicleFactory {
  createVehicle(type: string): Vehicle {
    switch (type) {
      case 'car':
        return new Vehicle('Car');
      case 'bike':
        return new Vehicle('Bike');
      default:
        throw new Error('Invalid vehicle type.');
    }
  }
}
// Usage
const factory = new VehicleFactory();
const car = factory.createVehicle('car');
console.log(car); // Output: Vehicle { type: 'Car' }
  1. Абстрактный фабричный метод:
    Абстрактный фабричный метод включает в себя создание фабричных классов для каждого семейства продуктов, предоставляя интерфейс для создания связанных объектов. Вот пример:
// Abstract Product
interface Vehicle {
  getType(): string;
}
// Concrete Products
class Car implements Vehicle {
  getType(): string {
    return 'Car';
  }
}
class Bike implements Vehicle {
  getType(): string {
    return 'Bike';
  }
}
// Abstract Factory
interface VehicleFactory {
  createVehicle(): Vehicle;
}
// Concrete Factories
class CarFactory implements VehicleFactory {
  createVehicle(): Vehicle {
    return new Car();
  }
}
class BikeFactory implements VehicleFactory {
  createVehicle(): Vehicle {
    return new Bike();
  }
}
// Usage
const carFactory = new CarFactory();
const car = carFactory.createVehicle();
console.log(car.getType()); // Output: Car
  1. Фабричный метод с внедрением зависимостей.
    При таком подходе фабричный метод внедряется в клиентский класс, что обеспечивает большую гибкость и возможность тестирования. Вот пример:
class Vehicle {
  constructor(public type: string) {}
}
interface VehicleFactory {
  createVehicle(): Vehicle;
}
class CarFactory implements VehicleFactory {
  createVehicle(): Vehicle {
    return new Vehicle('Car');
  }
}
class BikeFactory implements VehicleFactory {
  createVehicle(): Vehicle {
    return new Vehicle('Bike');
  }
}
class Client {
  constructor(private factory: VehicleFactory) {}
  createVehicle(): Vehicle {
    return this.factory.createVehicle();
  }
}
// Usage
const carFactory = new CarFactory();
const client = new Client(carFactory);
const car = client.createVehicle();
console.log(car); // Output: Vehicle { type: 'Car' }

В этой статье мы рассмотрели различные методы реализации шаблона проектирования «Фабрика» в TypeScript. Мы рассмотрели простой фабричный метод, абстрактный фабричный метод и фабричный метод с внедрением зависимостей. Используя шаблон проектирования Factory, разработчики могут добиться гибкости, модульности и удобства сопровождения кода в своих проектах.

Не забудьте выбрать подходящий метод в зависимости от сложности и требований вашего приложения. Приятного кодирования!