Wzorzec projektowy Abstract Factory w Java

Wzorzec projektowy Abstract Factory jest jednym z kreacyjnych wzorców projektowych, który umożliwia tworzenie rodzin obiektów bez konieczności określania ich konkretnych klas. Wzorzec ten jest szczególnie użyteczny w przypadku, gdy system ma być niezależny od sposobu tworzenia, komponowania i reprezentacji obiektów. W tej lekcji stworzymy przykład wykorzystania wzorca Abstract Factory do tworzenia interfejsu użytkownika (UI), który będzie dostosowywać się do różnych systemów operacyjnych.

Przykład: Fabryka elementów UI

Załóżmy, że tworzymy aplikację, która może działać na różnych systemach operacyjnych i chcemy, aby interfejs użytkownika (UI) automatycznie dostosowywał się do danego środowiska. Użyjemy wzorca Abstract Factory do stworzenia rodzin elementów UI takich jak przyciski i okna dialogowe.

Krok 1: Definiowanie interfejsów dla produktów
// Interfejs dla przycisku
public interface Button {
    void render();
}

// Interfejs dla okna dialogowego
public interface Dialog {
    void display();
}
Krok 2: Implementacja konkretnych produktów dla różnych systemów operacyjnych
// Przycisk dla systemu Windows
public class WindowsButton implements Button {
    @Override
    public void render() {
        System.out.println("Renderowanie przycisku dla Windows");
    }
}

// Okno dialogowe dla systemu Windows
public class WindowsDialog implements Dialog {
    @Override
    public void display() {
        System.out.println("Wyświetlanie okna dialogowego dla Windows");
    }
}

// Przycisk dla systemu Linux
public class LinuxButton implements Button {
    @Override
    public void render() {
        System.out.println("Renderowanie przycisku dla Linux");
    }
}

// Okno dialogowe dla systemu Linux
public class LinuxDialog implements Dialog {
    @Override
    public void display() {
        System.out.println("Wyświetlanie okna dialogowego dla Linux");
    }
}
Krok 3: Tworzenie interfejsu Abstract Factory
// Abstrakcyjna fabryka dla elementów UI
public interface UIFactory {
    Button createButton();
    Dialog createDialog();
}
Krok 4: Implementacja konkretnych fabryk
// Fabryka elementów UI dla Windows
public class WindowsUIFactory implements UIFactory {
    @Override
    public Button createButton() {
        return new WindowsButton();
    }

    @Override
    public Dialog createDialog() {
        return new WindowsDialog();
    }
}

// Fabryka elementów UI dla Linux
public class LinuxUIFactory implements UIFactory {
    @Override
    public Button createButton() {
        return new LinuxButton();
    }

    @Override
    public Dialog createDialog() {
        return new LinuxDialog();
    }
}
Krok 5: Użycie fabryki
// Klasa demonstracyjna
public class UIDemo {
    private static UIFactory uiFactory;

    public static void main(String[] args) {
        String osName = System.getProperty("os.name");
        if (osName.contains("Windows")) {
            uiFactory = new WindowsUIFactory();
        } else if (osName.contains("Linux")) {
            uiFactory = new LinuxUIFactory();
        }

        Button button = uiFactory.createButton();
        Dialog dialog = uiFactory.createDialog();

        button.render();
        dialog.display();
    }
}

Podsumowanie

Wzorzec Abstract Factory pozwala na tworzenie rodzin powiązanych lub zależnych obiektów bez określania ich konkretnych klas. Przykład z elementami UI dla różnych systemów operacyjnych pokazuje, jak można zastosować ten wzorzec do tworzenia aplikacji, które są niezależne od konkretnej implementacji interfejsu użytkownika, co zwiększa modularność i elastyczność kodu. Używając Abstract Factory, możemy łatwiej zarządzać różnorodnością produktów i ich konfiguracjami

Jeżeli chcesz przyśpieszyć swoją naukę tworzenia stron chciałbym polecić mój kurs video Java w którym nauczysz się tego języka od podstaw do zaawansowanych jego aspektów.

Scroll to Top