Паттерн проектирования «Фабричный метод» является одним из наиболее популярных паттернов, входящих в группу порождающих паттернов. Основная идея заключается в предоставлении интерфейса для создания объектов в суперклассе, при этом позволяя подклассам изменять тип создаваемых объектов. Это позволяет инкапсулировать логику создания объектов и делает систему более гибкой и расширяемой.
Определение
Фабричный метод определяет интерфейс для создания объектов, но позволяет подклассам изменять тип создаваемых объектов.
Пример использования паттерна
Рассмотрим задачу создания различных видов транспорта (например, машины и велосипеды) с использованием фабричного метода.
Описание задачи
Представим, что у нас есть приложение для аренды транспортных средств. В зависимости от выбора пользователя, необходимо создать либо машину, либо велосипед. Используя фабричный метод, мы сможем легко добавлять новые виды транспорта без изменения существующего кода.
Полный код примера на языке D
module transport;
import std.stdio;
import std.array;
// Интерфейс для транспортных средств
interface ITransport {
void drive();
}
// Класс машины
class Car : ITransport {
override void drive() {
writeln("Driving a car.");
}
}
// Класс велосипеда
class Bike : ITransport {
override void drive() {
writeln("Riding a bike.");
}
}
// Абстрактная фабрика
abstract class TransportFactory {
abstract ITransport createTransport();
void doSomething() {
auto transport = createTransport();
transport.drive();
}
}
// Фабрика для создания машин
class CarFactory : TransportFactory {
override ITransport createTransport() {
return new Car();
}
}
// Фабрика для создания велосипедов
class BikeFactory : TransportFactory {
override ITransport createTransport() {
return new Bike();
}
}
// Юнит-тесты
unittest {
auto carFactory = new CarFactory();
auto bikeFactory = new BikeFactory();
// Тестируем создание машины
auto car = carFactory.createTransport();
car.drive();
// Тестируем создание велосипеда
auto bike = bikeFactory.createTransport();
bike.drive();
}
// Главная функция для демонстрации работы
void main() {
auto carFactory = new CarFactory();
carFactory.doSomething();
auto bikeFactory = new BikeFactory();
bikeFactory.doSomething();
}
Плюсы и минусы использования паттерна
Плюсы
- Расширяемость: Легко добавлять новые виды продуктов, не изменяя существующий код.
- Инкапсуляция: Логика создания объектов скрыта от клиента.
- Снижение зависимости: Клиентский код зависит от абстракций, а не от конкретных классов.
Минусы
- Сложность: Добавляет дополнительный слой абстракции, что может усложнить код.
- Избыточность: В простых системах использование фабричного метода может быть избыточным.
Фабричный метод — мощный инструмент в арсенале программиста, позволяющий создавать гибкие и расширяемые системы. Используя паттерн фабричного метода, вы можете улучшить архитектуру своего приложения, сделать его более модульным и легко поддерживаемым.
Автор статьи:
Обновлено:
Добавить комментарий