Menu
Coddy logo textTech

Einführung in Design Patterns

Teil des Abschnitts Objektorientierte Programmierung der Java-Journey von Coddy — Lektion 64 von 87.

Design Patterns (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 praxiserprobten Vorlagen anwenden, um wiederkehrende Design-Herausforderungen zu lösen.

Betrachten Sie Entwurfsmuster als Baupläne. Sie liefern Ihnen keinen fertigen Code zum Kopieren und Einfügen, sondern beschreiben, wie Sie Ihre Klassen und Objekte strukturieren, um eine bestimmte Art von Problem zu lösen. Die Muster, die Sie lernen werden, nutzen die OOP-Konzepte, die Sie bereits beherrschen – Vererbung, Schnittstellen, Polymorphie und Komposition.

Entwurfsmuster lassen sich in drei Hauptkategorien unterteilen:

KategorieZweckBeispiele
ErzeugungsmusterWie Objekte erstellt werdenSingleton, Factory, Builder
StrukturmusterWie Objekte zusammengesetzt werdenAdapter, Decorator, Composite
VerhaltensmusterWie Objekte kommunizierenObserver, Strategy, Command

Warum sollte man Entwurfsmuster lernen? Sie bieten Ihnen ein gemeinsames Vokabular mit anderen Entwicklern – die Aussage „Verwenden Sie hier eine Factory“ vermittelt sofort eine komplexe Idee. Sie helfen Ihnen auch dabei, flexibleren und wartbareren Code zu schreiben, indem sie Prinzipien wie „Programmieren Sie gegen eine Schnittstelle, nicht gegen eine Implementierung“ anwenden.

In den kommenden Lektionen werden Sie mehrere wesentliche Muster implementieren, beginnend mit Erzeugungsmustern wie Singleton und Factory, und dann zu Verhaltensmustern wie Observer und Strategy übergehen.

challenge icon

Aufgabe

Einfach

Lassen Sie uns einen einfachen Muster-Klassifizierer erstellen, der Ihr Verständnis der drei Entwurfsmuster-Kategorien demonstriert! Sie werden ein System erstellen, das Muster kategorisiert und deren Zweck erklärt, wobei Sie Ihren Code über mehrere Dateien organisieren.

Sie werden drei Dateien erstellen:

  • Pattern.java: Erstellen Sie ein Interface namens Pattern, das den Vertrag für alle Entwurfsmuster definiert. Ihr Interface sollte zwei Methoden deklarieren: String getCategory(), die die Kategorie des Musters zurückgibt (Creational, Structural oder Behavioral), und String getPurpose(), die eine Beschreibung dessen zurückgibt, was diese Kategorie von Mustern tut.
  • PatternInfo.java: Erstellen Sie drei Klassen, die Ihr Pattern-Interface implementieren und jeweils eine Kategorie von Entwurfsmustern repräsentieren:

    CreationalPattern - sollte "Creational" für die Kategorie und "How objects are created" für den Zweck zurückgeben.

    StructuralPattern - sollte "Structural" für die Kategorie und "How objects are composed" für den Zweck zurückgeben.

    BehavioralPattern - sollte "Behavioral" für die Kategorie und "How objects communicate" für den Zweck zurückgeben.

  • Main.java: Bringen Sie Ihren Muster-Klassifizierer zusammen! Sie erhalten eine Eingabe: einen Musternamen (String), der einer der folgenden Werte sein wird: "Singleton", "Factory", "Adapter", "Decorator", "Observer" oder "Strategy".

    Erstellen Sie basierend auf der Eingabe das entsprechende Muster-Objekt:

    • "Singleton" und "Factory" sind Creational-Muster
    • "Adapter" und "Decorator" sind Structural-Muster
    • "Observer" und "Strategy" sind Behavioral-Muster

    Speichern Sie Ihr Muster-Objekt in einer Variablen vom Typ Pattern (dem Interface), was das Prinzip der Programmierung gegen ein Interface demonstriert. Geben Sie dann die folgenden drei Zeilen aus:

    Pattern: [input pattern name]

    Category: [category from getCategory()]

    Purpose: [purpose from getPurpose()]

Sie erhalten eine Eingabe: den Namen eines Entwurfsmusters (String).

Diese Herausforderung vertieft die wichtigste Erkenntnis aus der Lektion: Entwurfsmuster sind in Kategorien unterteilt, basierend darauf, welches Problem sie lösen. Durch die Verwendung eines Interfaces praktizieren Sie auch das Prinzip "Programmieren gegen ein Interface, nicht gegen eine Implementierung" – ein Kernkonzept, das Entwurfsmuster so mächtig macht!

Spickzettel

Entwurfsmuster sind bewährte Lösungen für häufig auftretende Probleme in der Softwareentwicklung. Sie sind Blaupausen, die beschreiben, wie Klassen und Objekte strukturiert werden sollten, um spezifische Arten von Problemen zu lösen.

Entwurfsmuster lassen sich in drei Hauptkategorien unterteilen:

KategorieZweckBeispiele
ErzeugungsmusterWie Objekte erstellt werdenSingleton, Factory, Builder
StrukturmusterWie Objekte zusammengesetzt sindAdapter, Decorator, Composite
VerhaltensmusterWie Objekte kommunizierenObserver, Strategy, Command

Entwurfsmuster bieten ein gemeinsames Vokabular unter Entwicklern und helfen dabei, flexibleren und wartbareren Code zu schreiben, indem Prinzipien wie „Programmieren gegen eine Schnittstelle, nicht gegen eine Implementierung“ angewendet werden.

Probier es selbst

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String patternName = scanner.nextLine();
        
        // TODO: Deklariere eine Variable vom Typ Pattern (das Interface)
        Pattern pattern = null;
        
        // TODO: Basierend auf patternName, erstelle das entsprechende Pattern-Objekt:
        // - "Singleton" und "Factory" sind Erzeugungsmuster
        // - "Adapter" und "Decorator" sind Strukturmuster
        // - "Observer" und "Strategy" sind Verhaltensmuster
        
        // TODO: Gib die Ausgabe im folgenden Format aus:
        // Pattern: [input pattern name]
        // Category: [Kategorie von getCategory()]
        // Purpose: [Zweck von getPurpose()]
    }
}
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