Паттерн проектирования «Фабричный метод»

Фабричный метод

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

Определение

Фабричный метод определяет интерфейс для создания объектов, но позволяет подклассам изменять тип создаваемых объектов.

Пример использования паттерна

Рассмотрим задачу создания различных видов транспорта (например, машины и велосипеды) с использованием фабричного метода.

Описание задачи

Представим, что у нас есть приложение для аренды транспортных средств. В зависимости от выбора пользователя, необходимо создать либо машину, либо велосипед. Используя фабричный метод, мы сможем легко добавлять новые виды транспорта без изменения существующего кода.

Полный код примера на языке 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();
}

Плюсы и минусы использования паттерна

Плюсы

  1. Расширяемость: Легко добавлять новые виды продуктов, не изменяя существующий код.
  2. Инкапсуляция: Логика создания объектов скрыта от клиента.
  3. Снижение зависимости: Клиентский код зависит от абстракций, а не от конкретных классов.

Минусы

  1. Сложность: Добавляет дополнительный слой абстракции, что может усложнить код.
  2. Избыточность: В простых системах использование фабричного метода может быть избыточным.

Фабричный метод — мощный инструмент в арсенале программиста, позволяющий создавать гибкие и расширяемые системы. Используя паттерн фабричного метода, вы можете улучшить архитектуру своего приложения, сделать его более модульным и легко поддерживаемым.


Карпов Ярослав

Автор статьи:

Обновлено:

23.05.2024


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *