Wzorzec projektowy— FACTORY

factory, industrial, pollution-4130563.jpg

Wzorzec Factory (Fabryka) jest wzorcem projektowym, który dostarcza interfejs do tworzenia obiektów w klasie nadrzędnej, ale pozwala na zmianę typu tworzonego obiektu w klasach pochodnych. Jest to przydatne, gdy chcemy odseparować proces tworzenia obiektu od jego używania.

Java
// Interfejs reprezentujący produkt
interface Product {
    void printInfo();
}

// Klasa reprezentująca konkretne produkty
class ConcreteProductA implements Product {
    @Override
    public void printInfo() {
        System.out.println("Product A");
    }
}

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

// Fabryka abstrakcyjna
interface ProductFactory {
    Product createProduct();
}

// Implementacje fabryk produkujących konkretne produkty
class ConcreteProductAFactory implements ProductFactory {
    @Override
    public Product createProduct() {
        return new ConcreteProductA();
    }
}

class ConcreteProductBFactory implements ProductFactory {
    @Override
    public Product createProduct() {
        return new ConcreteProductB();
    }
}

// Klient korzystający z fabryki
public class Client {
    public static void main(String[] args) {
        // Utworzenie fabryki dla produktu A
        ProductFactory factoryA = new ConcreteProductAFactory();
        // Utworzenie produktu A
        Product productA = factoryA.createProduct();
        // Wywołanie metody na produkcie A
        productA.printInfo();

        // Utworzenie fabryki dla produktu B
        ProductFactory factoryB = new ConcreteProductBFactory();
        // Utworzenie produktu B
        Product productB = factoryB.createProduct();
        // Wywołanie metody na produkcie B
        productB.printInfo();
    }
}

W tym przykładzie mamy interfejs Product reprezentujący produkty, a następnie dwie konkretne implementacje: ConcreteProductA i ConcreteProductB. Fabryka abstrakcyjna ProductFactory definiuje metodę createProduct(), a dwie konkretne fabryki ConcreteProductAFactory i ConcreteProductBFactory implementują tę metodę, tworząc odpowiednie produkty.

W kliencie (Client) możemy następnie używać różnych fabryk do tworzenia różnych produktów, bez konieczności znać szczegółów implementacji konkretnych produktów. To umożliwia elastyczne zarządzanie rodzajem tworzonych obiektów.

Scroll to Top