Menu
Coddy logo textTech

Einführung in Entwurfsmuster

Teil des Abschnitts Objektorientierte Programmierung der C#-Journey von Coddy. Lektion 51 von 70.

Entwurfsmuster sind bewährte Lösungen für häufige Probleme, auf die Entwickler beim wiederholten Erstellen von Software stoßen. Anstatt jedes Mal das Rad neu zu erfinden, bieten uns Muster ein gemeinsames Vokabular und erprobte Ansätze zur Strukturierung von Code.

Stell dir Entwurfsmuster als Baupläne vor. Sie liefern dir keinen exakten Code zum Kopieren, sondern beschreiben, wie Klassen und Objekte organisiert werden, um bestimmte Herausforderungen zu lösen. Wenn jemand erwähnt: „Verwende hier das Factory-Muster“, verstehen erfahrene Entwickler sofort die allgemeine vorgeschlagene Struktur.

Entwurfsmuster fallen in drei Hauptkategorien:

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

Die Muster, die wir untersuchen werden, bauen direkt auf OOP-Konzepten auf, die Sie bereits gelernt haben – Interfaces, Vererbung, Polymorphismus und Komposition. Jedes Muster nutzt diese Grundlagen auf spezifische Weise, um Flexibilität, Wartbarkeit oder Wiederverwendbarkeit zu erreichen.

In den kommenden Lektionen implementierst du mehrere wichtige Muster, beginnend mit Singleton, Factory, Observer und Strategy. Wenn du diese Muster verstehst, kannst du gängige Lösungen in bestehenden Codebasen erkennen und bessere Architekturentscheidungen in deinen eigenen Projekten treffen.

challenge icon

Aufgabe

Einfach

Lass uns ein einfaches Katalogsystem für Entwurfsmuster erstellen, das Informationen zu Entwurfsmustern über mehrere Dateien hinweg organisiert. Dadurch verstehst du besser, wie Muster kategorisiert werden, und übst gleichzeitig eine gute Codeorganisation.

Du erstellst drei Dateien, um verschiedene Verantwortlichkeiten zu trennen:

  • Pattern.cs: Definiere eine Pattern-Klasse im Namespace Patterns, die ein einzelnes Entwurfsmuster darstellt. Jedes Muster sollte über einen Name, eine Category (Creational, Structural oder Behavioral) und eine Description verfügen. Füge eine Methode GetSummary() ein, die eine formatierte Zeichenfolge zurückgibt: [{Category}] {Name}: {Description}
  • PatternCatalog.cs: Erstelle eine PatternCatalog-Klasse im Namespace Patterns, die eine Sammlung von Mustern verwaltet. Dein Katalog sollte Muster hinzufügen können und über eine Methode GetPatternsByCategory(string category) verfügen, die eine Liste aller Muster zurückgibt, die dieser Kategorie entsprechen. Füge außerdem eine Methode GetAllSummaries() ein, die eine Liste von Zusammenfassungszeichenfolgen für alle Muster im Katalog zurückgibt.
  • Program.cs: Führe alles zusammen, indem du einen Katalog erstellst und ihn anhand der Eingabe mit Mustern befüllst. Zeige anschließend die nach Kategorie gefilterten Muster an.

Du erhältst die folgenden Eingaben:

  • Anzahl der hinzuzufügenden Muster
  • Für jedes Muster: drei Zeilen mit Name, Kategorie und Beschreibung
  • Eine Kategorie, nach der gefiltert werden soll

Nachdem du alle Muster zu deinem Katalog hinzugefügt hast, gib die Zusammenfassungen der Muster aus, die der Filterkategorie entsprechen, jeweils eine pro Zeile. Wenn keine Muster übereinstimmen, gib No patterns found aus.

Wenn die Eingaben beispielsweise folgendermaßen lauten:

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

Die Ausgabe sollte folgendermaßen aussehen:

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

Diese Aufgabe zeigt, wie die Organisation zusammengehöriger Klassen in separaten Dateien deine Codebasis übersichtlich und wartbar hält – ein Prinzip, das noch wichtiger wird, wenn du in den kommenden Lektionen tatsächliche Entwurfsmuster implementierst!

Probier es selbst

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

class Program
{
    public static void Main(string[] args)
    {
        // Lies die Anzahl der Muster ein
        int n = Convert.ToInt32(Console.ReadLine());
        
        // Erstelle einen neuen PatternCatalog
        PatternCatalog catalog = new PatternCatalog();
        
        // TODO: Lies die Details jedes Musters ein (name, category, description)
        // und füge sie dem Katalog hinzu
        for (int i = 0; i < n; i++)
        {
            string name = Console.ReadLine();
            string category = Console.ReadLine();
            string description = Console.ReadLine();
            
            // TODO: Erstelle ein Pattern und füge es dem Katalog hinzu
        }
        
        // Lies die Kategorie ein, nach der gefiltert werden soll
        string filterCategory = Console.ReadLine();
        
        // TODO: Rufe die Muster der Filterkategorie ab
        // und gib deren Zusammenfassungen aus
        // Wenn keine Muster übereinstimmen, gib "No patterns found" aus
    }
}
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

Übe selbstständig: Online-C#-Compiler