Menu
Coddy logo textTech

Wprowadzenie do wzorców projektowych

Część sekcji Programowanie obiektowe ścieżki C# w Coddy. Lekcja 51 z 70.

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, wzorce zapewniają nam wspólne słownictwo i sprawdzone podejścia do strukturyzowania kodu.

Myśl o wzorcach projektowych jak o planach. Nie podają dokładnego kodu do skopiowania, ale opisują, jak organizować klasy i obiekty, aby rozwiązywać konkretne problemy. Gdy ktoś mówi „użyj tutaj wzorca Factory”, doświadczeni programiści od razu rozumieją proponowaną ogólną strukturę.

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

KategoriaCelPrzykłady
KreacyjneJak tworzone są obiektySingleton, Factory
StrukturalneJak komponowane są obiektyAdapter, Decorator
CzynnościoweJak komunikują się obiektyObserver, Strategy

Wzorce, które omówimy, bazują bezpośrednio na poznanych już koncepcjach OOP — interfejsach, dziedziczeniu, polimorfizmie i kompozycji. Każdy wzorzec wykorzystuje te podstawy w określony sposób, aby zapewnić elastyczność, łatwość utrzymania lub możliwość ponownego użycia.

W kolejnych lekcjach zaimplementujesz kilka podstawowych wzorców, zaczynając od Singleton, Factory, Observer i Strategy. Zrozumienie tych wzorców pomoże Ci rozpoznawać typowe rozwiązania w istniejących bazach kodu i podejmować lepsze decyzje architektoniczne we własnych projektach.

challenge icon

Wyzwanie

Łatwy

Zbudujmy prosty system katalogu wzorców, który porządkuje informacje o wzorcach projektowych w wielu plikach. Pomoże ci to zrozumieć, jak kategoryzować wzorce, a jednocześnie ćwiczyć dobrą organizację kodu.

Utworzysz trzy pliki, aby rozdzielić różne zadania:

  • Pattern.cs: Zdefiniuj klasę Pattern w przestrzeni nazw Patterns, która reprezentuje pojedynczy wzorzec projektowy. Każdy wzorzec powinien mieć Name, Category (Creational, Structural lub Behavioral) oraz Description. Dodaj metodę GetSummary(), która zwraca sformatowany ciąg znaków: [{Category}] {Name}: {Description}
  • PatternCatalog.cs: Utwórz klasę PatternCatalog w przestrzeni nazw Patterns, która zarządza kolekcją wzorców. Katalog powinien umożliwiać dodawanie wzorców i zawierać metodę GetPatternsByCategory(string category), która zwraca listę wszystkich wzorców pasujących do danej kategorii. Dodaj też metodę GetAllSummaries(), która zwraca listę ciągów znaków z podsumowaniami wszystkich wzorców w katalogu.
  • Program.cs: Połącz wszystko, tworząc katalog i wypełniając go wzorcami na podstawie danych wejściowych. Następnie wyświetl wzorce przefiltrowane według kategorii.

Otrzymasz następujące dane wejściowe:

  • Liczba wzorców do dodania
  • Dla każdego wzorca: trzy wiersze zawierające nazwę, kategorię i opis
  • Kategoria, według której należy filtrować

Po dodaniu wszystkich wzorców do katalogu wypisz podsumowania wzorców pasujących do filtrowanej kategorii, po jednym w każdym wierszu. Jeśli żadne wzorce nie pasują, wypisz No patterns found.

Na przykład, jeśli dane wejściowe to:

3
Singleton
Creational
Ensures only one instance exists
Observer
Behavioral
Notifies dependents of state changes
Factory
Creational
Creates objects without specifying exact class
Creational

Wynik powinien być następujący:

[Creational] Singleton: Ensures only one instance exists
[Creational] Factory: Creates objects without specifying exact class

To wyzwanie pokazuje, jak organizowanie powiązanych klas w osobnych plikach pomaga utrzymać porządek w bazie kodu i ułatwia jej konserwację — ta zasada staje się jeszcze ważniejsza, gdy w kolejnych lekcjach zaczniesz implementować rzeczywiste wzorce projektowe!

Spróbuj swoich sił

using System;
using System.Collections.Generic;
using Patterns;

class Program
{
    public static void Main(string[] args)
    {
        // Odczytaj liczbę wzorców
        int n = Convert.ToInt32(Console.ReadLine());
        
        // Utwórz nowy PatternCatalog
        PatternCatalog catalog = new PatternCatalog();
        
        // TODO: Odczytaj szczegóły każdego wzorca (name, category, description)
        // i dodaj je do katalogu
        for (int i = 0; i < n; i++)
        {
            string name = Console.ReadLine();
            string category = Console.ReadLine();
            string description = Console.ReadLine();
            
            // TODO: Utwórz Pattern i dodaj go do katalogu
        }
        
        // Odczytaj kategorię, według której należy filtrować
        string filterCategory = Console.ReadLine();
        
        // TODO: Pobierz wzorce z wybranej kategorii
        // i wypisz ich podsumowania
        // Jeśli żadne wzorce nie pasują, wypisz "No patterns found"
    }
}
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 C# online