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.