Pascal4eg / Java

 Java | Фишки и трюки

Паттерн "Фабричный метод" (Factory Method) в Java

Паттерн "Фабричный метод" (Factory Method) позволяет создавать объекты без указания конкретных классов. Создание объекта делегируется методу, который может быть переопределен подклассом, чтобы изменить тип создаваемого объекта.

Пример реализации:

1️⃣ Создадим интерфейс продукта, который будет производиться фабричным методом.

interface Product {
    void use();
}

2️⃣ Создадим реализации продуктов.

class ConcreteProductA implements Product {
    @Override
    public void use() {
        System.out.println("Using ConcreteProductA");
    }
}

class ConcreteProductB implements Product {
    @Override
    public void use() {
        System.out.println("Using ConcreteProductB");
    }
}

3️⃣ Создадим абстрактный класс с фабричным методом.

abstract class Creator {
    public abstract Product factoryMethod();

    public void anOperation() {
        Product product = factoryMethod();
        product.use();
    }
}

4️⃣ Реализуем конкретные создатели для каждого типа продукта.

class ConcreteCreatorA extends Creator {
    @Override
    public Product factoryMethod() {
        return new ConcreteProductA();
    }
}

class ConcreteCreatorB extends Creator {
    @Override
    public Product factoryMethod() {
        return new ConcreteProductB();
    }
}

5️⃣ Демонстрация использования.

public class FactoryMethodDemo {
    public static void main(String[] args) {
        Creator creatorA = new ConcreteCreatorA();
        creatorA.anOperation();  // Использует ConcreteProductA

        Creator creatorB = new ConcreteCreatorB();
        creatorB.anOperation();  // Использует ConcreteProductB
    }
}

В этом примере класс FactoryMethodDemo демонстрирует использование фабричного метода. Класс Creator содержит фабричный метод factoryMethod(), который переопределяется в подклассах ConcreteCreatorA и ConcreteCreatorB для создания конкретных продуктов ConcreteProductA и ConcreteProductB соответственно.