Menu
Coddy logo textTech

Wprowadzenie do wzorców projektowych

Część sekcji Programowanie obiektowe ścieżki Dart w Coddy. Lekcja 89 z 110.

Wzorce projektowe to sprawdzone rozwiązania typowych problemów, z którymi programiści wielokrotnie spotykają się podczas tworzenia oprogramowania. Zamiast za każdym razem wymyślać koło na nowo, możesz stosować te sprawdzone szablony, aby rozwiązywać podobne wyzwania w spójny i łatwy w utrzymaniu sposób.

Myśl o wzorcach projektowych jak o przepisach. Tak jak kucharz nie wymyśla za każdym razem nowego sposobu na pieczenie chleba, programiści korzystają ze wzorców, które udoskonalano przez dziesięciolecia. Wzorce te wykorzystują poznane już przez Ciebie koncepcje OOP — klasy, dziedziczenie, interfejsy i polimorfizm — i łączą je w określony sposób, aby rozwiązywać konkretne problemy.

Wzorce projektowe są zwykle grupowane w trzy kategorie:

KategoriaCelPrzykłady
KreacyjneSposób tworzenia obiektówSingleton, Factory
StrukturalneSposób komponowania obiektówAdapter, Decorator
BehawioralneSposób komunikowania się obiektówObserver, Strategy

W nadchodzących lekcjach poznasz konkretne wzorce z każdej kategorii. Każdy wzorzec rozwiązuje inny problem: zapewnia, że istnieje tylko jedna instancja klasy, umożliwia tworzenie obiektów bez określania dokładnych klas lub pozwala obiektom powiadamiać inne o zmianach. Zrozumienie, kiedy i dlaczego używać poszczególnych wzorców, jest równie ważne jak wiedza o tym, jak je implementować.

challenge icon

Wyzwanie

Łatwy

Zbudujmy prosty system rozwiązywania problemów, który pokazuje, jak wzorce projektowe porządkują kod według kategorii! Utworzysz strukturę, która klasyfikuje różne wyzwania programistyczne i sugeruje, jaki typ wzorca może pomóc w ich rozwiązaniu.

Podzielisz kod na dwa pliki:

  • patterns.dart: Utwórz wyliczenie o nazwie PatternCategory z trzema wartościami: creational, structural i behavioral. Każda z nich powinna mieć pole String description objaśniające jej przeznaczenie:
    • creational: "Handles object creation"
    • structural: "Handles object composition"
    • behavioral: "Handles object communication"
    Utwórz również klasę o nazwie Problem, która reprezentuje wyzwanie programistyczne. Powinna mieć pole String name i pole PatternCategory category. Dodaj metodę suggest(), która zwraca ciąg znaków w formacie: [name] -> Use a [category description] pattern
  • main.dart: Zaimportuj plik z wzorcami i pokaż, jak różne problemy są przyporządkowywane do różnych kategorii wzorców. Utwórz trzy instancje klasy Problem:
    • Problem o nazwie Ensure single database connection z kategorią creational
    • Problem o nazwie Make old API work with new system z kategorią structural
    • Problem o nazwie Notify users when data changes z kategorią behavioral
    Wywołaj suggest() dla każdego problemu i wypisz wyniki.

To wyzwanie pomoże ci zrozumieć, jak wzorce projektowe są kategoryzowane według rodzaju problemu, który rozwiązują — to kluczowe pojęcie, gdy w kolejnych lekcjach zaczniesz poznawać konkretne wzorce!

Oczekiwany wynik:

Ensure single database connection -> Use a Handles object creation pattern
Make old API work with new system -> Use a Handles object composition pattern
Notify users when data changes -> Use a Handles object communication pattern

Spróbuj swoich sił

import 'patterns.dart';

void main() {
  // TODO: Utwórz trzy instancje klasy Problem:
  // 1. name: "Ensure single database connection", category: creational
  // 2. name: "Make old API work with new system", category: structural
  // 3. name: "Notify users when data changes", category: behavioral

  // TODO: Wywołaj suggest() dla każdego problemu i wypisz wyniki
}
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 Dart online