Menu
Coddy logo textTech

Wprowadzenie do wzorców projektowych

Część sekcji Programowanie obiektowe ścieżki PHP w Coddy. Lekcja 70 z 91.

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ć podobne problemy we własnym kodzie.

Pomyśl o wzorcach projektowych jak o przepisach. Tak jak kucharz postępuje zgodnie z przepisem, aby przygotować danie dopracowywane przez lata, programiści używają wzorców projektowych, by porządkować swój kod na sposoby przetestowane i udoskonalone przez niezliczonych programistów przed nimi.

Wzorce projektowe zazwyczaj dzieli się na trzy kategorie:

Kategoria Cel Przykłady
Kreacyjne Jak tworzone są obiekty Singleton, Factory
Strukturalne Jak obiekty są komponowane Adapter, Decorator
Behawioralne Jak obiekty się komunikują Observer, Strategy

Tak naprawdę przez cały ten kurs korzystasz ze wzorców, nawet o tym nie wiedząc. Tworząc klasy abstrakcyjne z metodami, które klasy potomne muszą implementować, stosujesz odmianę wzorca Template Method. Używając interfejsów do definiowania kontraktów, przygotowujesz się do zastosowania wzorca Strategy.

Poznawanie wzorców projektowych daje ci wspólny język z innymi programistami. Zamiast szczegółowo wyjaśniać złożoną strukturę, możesz po prostu powiedzieć „Użyłem tutaj wzorca Fabryka”, a doświadczeni programiści od razu zrozumieją twoje podejście. W kolejnych lekcjach zaimplementujemy kilka podstawowych wzorców w PHP.

challenge icon

Wyzwanie

Łatwy

Zbudujmy prosty system formatowania wiadomości, który pokazuje, jak wzorce projektowe pomagają organizować kod. Określisz, do której kategorii wzorców należy każdy komponent, i zobaczysz, jak różne części systemu współpracują ze sobą.

Rozmieścisz swój kod w trzech plikach:

  • MessageFormatter.php: Utwórz interfejs o nazwie MessageFormatter, który definiuje kontrakt formatowania wiadomości. Powinien mieć jedną metodę format(string $message): string. Reprezentuje ona kategorię behawioralną. Definiuje sposób, w jaki obiekty komunikują się i przetwarzają dane.
  • Formatters.php: Dołącz plik MessageFormatter i utwórz dwie klasy implementujące interfejs:
    • UppercaseFormatter: Jego metoda format() zwraca wiadomość zamienioną na wielkie litery
    • BracketFormatter: Jego metoda format() umieszcza wiadomość w nawiasach kwadratowych, tak jak [message]
  • main.php: Dołącz plik Formatters. Otrzymasz dwa wejścia: ciąg znaków z wiadomością oraz typ formatowania ("upper" lub "bracket").

    Utwórz funkcję o nazwie processMessage, która przyjmuje MessageFormatter i ciąg znaków z wiadomością, a następnie zwraca sformatowany wynik. Ta funkcja nie musi wiedzieć, który konkretny formater otrzymuje. Po prostu wywołuje format() na przekazanym obiekcie.

    Na podstawie wejściowego typu formatowania utwórz odpowiedni obiekt formatera. Przekaż go do funkcji processMessage wraz z wiadomością i wypisz wynik.

    W nowym wierszu wypisz, którą kategorię wzorców reprezentuje ta struktura. Ponieważ definiujemy wymienne zachowania za pomocą interfejsu, wypisz: Pattern category: Behavioral

To wyzwanie pokazuje, jak interfejsy pozwalają wymieniać implementacje bez zmieniania kodu, który z nich korzysta: to podstawa wzorców takich jak Strategia, które poznasz na nadchodzących lekcjach.

Spróbuj swoich sił

<?php
require_once 'Formatters.php';

// Wczytaj dane wejściowe
$message = trim(fgets(STDIN));
$formatterType = trim(fgets(STDIN));

// TODO: Utwórz funkcję o nazwie processMessage, która przyjmuje MessageFormatter
// oraz ciąg znaków z wiadomością, a następnie zwraca sformatowany wynik


// TODO: Na podstawie $formatterType ("upper" lub "bracket") utwórz odpowiedni obiekt formatujący


// TODO: Wywołaj processMessage z obiektem formatującym i wiadomością, a następnie wypisz wynik


// TODO: Wypisz kategorię wzorca w nowym wierszu
// Format: "Pattern category: Behavioral"

?>
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 PHP online