При разработке программного обеспечения шаблоны проектирования играют решающую роль в создании масштабируемого, удобного в обслуживании и гибкого кода. Одним из таких шаблонов является шаблон проектирования «Фабрика», который предоставляет интерфейс для создания объектов без указания их конкретных классов. В этой статье мы рассмотрим различные методы реализации шаблона проектирования Factory с использованием TypeScript, а также приведем примеры кода.
- Простой фабричный метод:
Простой фабричный метод включает в себя один фабричный класс, отвечающий за создание объектов на основе заданного параметра. Вот пример:
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' }
- Абстрактный фабричный метод:
Абстрактный фабричный метод включает в себя создание фабричных классов для каждого семейства продуктов, предоставляя интерфейс для создания связанных объектов. Вот пример:
// 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
- Фабричный метод с внедрением зависимостей.
При таком подходе фабричный метод внедряется в клиентский класс, что обеспечивает большую гибкость и возможность тестирования. Вот пример:
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, разработчики могут добиться гибкости, модульности и удобства сопровождения кода в своих проектах.
Не забудьте выбрать подходящий метод в зависимости от сложности и требований вашего приложения. Приятного кодирования!