Menu
Coddy logo textTech

Wprowadzenie do wzorców projektowych

Część sekcji Programowanie obiektowe ścieżki Java w Coddy. Lekcja 64 z 87.

Wzorce projektowe to sprawdzone rozwiązania typowych problemów, z którymi programiści wielokrotnie się spotykają podczas tworzenia oprogramowania. Zamiast za każdym razem wymyślać koło na nowo, możesz zastosować te sprawdzone szablony, aby rozwiązywać powtarzające się wyzwania projektowe.

Myśl o wzorcach projektowych jak o planach. Nie dają ci gotowego kodu do skopiowania i wklejenia, ale opisują, jak strukturyzować klasy i obiekty, aby rozwiązać określony typ problemu. Wzorce, których się nauczysz, wykorzystują poznane już przez ciebie koncepcje OOP: dziedziczenie, interfejsy, polimorfizm i kompozycję.

Wzorce projektowe dzielą się na trzy główne kategorie:

KategoriaCelPrzykłady
KreacyjneJak tworzone są obiektySingleton, Factory, Builder
StrukturalneJak komponowane są obiektyAdapter, Decorator, Composite
BehawioralneJak komunikują się obiektyObserver, Strategy, Command

Po co uczyć się wzorców projektowych? Dają ci wspólny język z innymi programistami: stwierdzenie „użyj tutaj Fabryki” natychmiast przekazuje złożoną ideę. Pomagają też pisać bardziej elastyczny i łatwiejszy w utrzymaniu kod dzięki stosowaniu zasad takich jak „programuj do interfejsu, a nie do implementacji”.

W nadchodzących lekcjach zaimplementujesz kilka podstawowych wzorców, zaczynając od wzorców kreacyjnych, takich jak Singleton i Factory, a następnie przechodząc do wzorców behawioralnych, takich jak Observer i Strategy.

challenge icon

Wyzwanie

Łatwy

Zbudujmy prosty klasyfikator wzorców, który pokaże, jak dobrze rozumiesz trzy kategorie wzorców projektowych! Utworzysz system, który klasyfikuje wzorce i wyjaśnia ich przeznaczenie, a kod rozmieścisz w wielu plikach.

Utworzysz trzy pliki:

  • Pattern.java: Utwórz interfejs o nazwie Pattern, który definiuje kontrakt dla wszystkich wzorców projektowych. Interfejs powinien deklarować dwie metody: String getCategory(), która zwraca kategorię wzorca (Creational, Structural lub Behavioral), oraz String getPurpose(), która zwraca opis tego, do czego służy dana kategoria wzorców.
  • PatternInfo.java: Utwórz trzy klasy implementujące interfejs Pattern, z których każda reprezentuje jedną kategorię wzorców projektowych:

    CreationalPattern — powinna zwracać "Creational" jako kategorię i "How objects are created" jako przeznaczenie.

    StructuralPattern — powinna zwracać "Structural" jako kategorię i "How objects are composed" jako przeznaczenie.

    BehavioralPattern — powinna zwracać "Behavioral" jako kategorię i "How objects communicate" jako przeznaczenie.

  • Main.java: Połącz elementy klasyfikatora wzorców! Otrzymasz jedno wejście: nazwę wzorca (String), która będzie jedną z wartości: "Singleton", "Factory", "Adapter", "Decorator", "Observer" lub "Strategy".

    Na podstawie wejścia utwórz odpowiedni obiekt wzorca:

    • "Singleton" i "Factory" to wzorce Creational
    • "Adapter" i "Decorator" to wzorce Structural
    • "Observer" i "Strategy" to wzorce Behavioral

    Przypisz obiekt wzorca do zmiennej typu Pattern (interfejsu), demonstrując zasadę programowania do interfejsu. Następnie wyświetl trzy poniższe wiersze:

    Pattern: [input pattern name]

    Category: [category from getCategory()]

    Purpose: [purpose from getPurpose()]

Otrzymasz jedno wejście: nazwę wzorca projektowego (String).

To wyzwanie utrwala kluczową myśl z lekcji: wzorce projektowe są uporządkowane w kategorie na podstawie problemów, które rozwiązują. Korzystając z interfejsu, ćwiczysz również zasadę „programowania do interfejsu, a nie implementacji” — podstawową koncepcję, dzięki której wzorce projektowe są tak potężne!

Spróbuj swoich sił

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String patternName = scanner.nextLine();
        
        // TODO: Zadeklaruj zmienną typu Pattern (interfejsu)
        Pattern pattern = null;
        
        // TODO: Na podstawie patternName utwórz odpowiedni obiekt wzorca:
        // - "Singleton" i "Factory" to wzorce kreacyjne
        // - "Adapter" i "Decorator" to wzorce strukturalne
        // - "Observer" i "Strategy" to wzorce behawioralne
        
        // TODO: Wypisz wynik w następującym formacie:
        // Pattern: [nazwa wzorca podana na wejściu]
        // Category: [kategoria zwrócona przez getCategory()]
        // Purpose: [cel zwrócony przez getPurpose()]
    }
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator Java online