Menu
Coddy logo textTech

Einführung in Entwurfsmuster

Teil des Abschnitts Objektorientierte Programmierung der PHP-Journey von Coddy — Lektion 70 von 91.

Entwurfsmuster sind bewährte Lösungen für häufige Probleme, auf die Entwickler beim Erstellen von Software immer wieder stoßen. Anstatt das Rad jedes Mal neu zu erfinden, können Sie diese bewährten Vorlagen anwenden, um ähnliche Herausforderungen in Ihrem eigenen Code zu lösen.

Stellen Sie sich Entwurfsmuster wie Rezepte vor. Genauso wie ein Koch einem Rezept folgt, um ein Gericht zu kreieren, das im Laufe der Zeit perfektioniert wurde, verwenden Entwickler Entwurfsmuster, um ihren Code auf eine Weise zu strukturieren, die von unzähligen Programmierern vor ihnen getestet und verfeinert wurde.

Entwurfsmuster werden üblicherweise in drei Kategorien unterteilt:

Kategorie Zweck Beispiele
Erzeugungsmuster Wie Objekte erstellt werden Singleton, Factory
Strukturmuster Wie Objekte zusammengesetzt werden Adapter, Decorator
Verhaltensmuster Wie Objekte kommunizieren Observer, Strategy

Sie haben im Laufe dieses Kurses tatsächlich Muster verwendet, ohne es zu merken. Als Sie abstrakte Klassen mit Methoden erstellt haben, die Kindklassen implementieren müssen, haben Sie eine Form des Template Method-Musters angewendet. Als Sie Interfaces verwendet haben, um Verträge zu definieren, haben Sie die Grundlage für das Strategy-Muster geschaffen.

Das Erlernen von Entwurfsmustern bietet Ihnen ein gemeinsames Vokabular mit anderen Entwicklern. Anstatt eine komplexe Struktur im Detail zu erklären, können Sie einfach sagen: „Ich habe hier das Factory-Pattern verwendet“, und erfahrene Entwickler werden Ihren Ansatz sofort verstehen. In den folgenden Lektionen werden wir mehrere essenzielle Muster in PHP implementieren.

challenge icon

Aufgabe

Einfach

Lassen Sie uns ein einfaches System zur Nachrichtenformatierung erstellen, das zeigt, wie Entwurfsmuster helfen, Code zu organisieren. Sie werden identifizieren, zu welcher Musterkategorie jede Komponente gehört, und sehen, wie verschiedene Teile eines Systems zusammenarbeiten.

Sie werden Ihren Code über drei Dateien hinweg organisieren:

  • MessageFormatter.php — Erstellen Sie ein Interface namens MessageFormatter, das einen Vertrag für die Formatierung von Nachrichten definiert. Es sollte eine einzige Methode format(string $message): string haben. Dies repräsentiert die Kategorie behavioral (Verhaltensmuster) — sie definiert, wie Objekte kommunizieren und Daten verarbeiten.
  • Formatters.php — Binden Sie die Datei MessageFormatter ein und erstellen Sie zwei Klassen, die das Interface implementieren:
    • UppercaseFormatter — Seine Methode format() gibt die Nachricht in Großbuchstaben umgewandelt zurück.
    • BracketFormatter — Seine Methode format() umschließt die Nachricht mit eckigen Klammern wie [message].
  • main.php — Binden Sie die Datei Formatters ein. Sie erhalten zwei Eingaben: einen Nachrichten-String und einen Formatter-Typ ("upper" oder "bracket").

    Erstellen Sie eine Funktion namens processMessage, die einen MessageFormatter und einen Nachrichten-String akzeptiert und dann das formatierte Ergebnis zurückgibt. Diese Funktion muss nicht wissen, welchen spezifischen Formatter sie erhält — sie ruft einfach format() für das übergebene Objekt auf.

    Erstellen Sie basierend auf der Eingabe des Formatter-Typs das entsprechende Formatter-Objekt. Übergeben Sie es zusammen mit der Nachricht an Ihre Funktion processMessage und geben Sie das Ergebnis aus.

    Geben Sie in einer neuen Zeile aus, welche Musterkategorie diese Struktur repräsentiert. Da wir austauschbare Verhaltensweisen über ein Interface definieren, geben Sie aus: Pattern category: Behavioral

Diese Herausforderung zeigt, wie Interfaces es ermöglichen, Implementierungen auszutauschen, ohne den Code zu ändern, der sie verwendet — eine Grundlage für Muster wie Strategy, die Sie in den kommenden Lektionen erkunden werden.

Spickzettel

Entwurfsmuster sind bewährte Lösungen für gängige Programmierprobleme, die Vorlagen für die effektive Strukturierung von Code bieten.

Entwurfsmuster werden in drei Kategorien unterteilt:

Kategorie Zweck Beispiele
Erzeugungsmuster Wie Objekte erstellt werden Singleton, Factory
Strukturmuster Wie Objekte zusammengesetzt werden Adapter, Decorator
Verhaltensmuster Wie Objekte kommunizieren Observer, Strategy

Entwurfsmuster bieten ein gemeinsames Vokabular unter Entwicklern, was die Kommunikation über komplexe Architektur-Entscheidungen erleichtert.

Probier es selbst

<?php
require_once 'Formatters.php';

// Eingabe lesen
$message = trim(fgets(STDIN));
$formatterType = trim(fgets(STDIN));

// TODO: Erstellen Sie eine Funktion namens processMessage, die einen MessageFormatter akzeptiert
// und einen Nachrichten-String, und dann das formatierte Ergebnis zurückgibt


// TODO: Basierend auf $formatterType ("upper" oder "bracket"), erstellen Sie den entsprechenden Formatter


// TODO: Rufen Sie processMessage mit dem Formatter und der Nachricht auf und geben Sie das Ergebnis aus


// TODO: Geben Sie die Musterkategorie in einer neuen Zeile aus
// Format: "Pattern category: Behavioral"

?>
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Objektorientierte Programmierung