Menu
Coddy logo textTech

Einführung in Entwurfsmuster

Teil des Abschnitts Objektorientierte Programmierung der Dart-Journey von Coddy — Lektion 89 von 110.

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 etablierten Vorlagen anwenden, um ähnliche Herausforderungen auf eine konsistente und wartbare Weise zu lösen.

Betrachten Sie Entwurfsmuster als Rezepte. Genauso wie ein Koch nicht jedes Mal eine neue Art der Brotherstellung erfindet, verwenden Programmierer Muster, die über Jahrzehnte hinweg verfeinert wurden. Diese Muster nutzen die OOP-Konzepte, die Sie bereits gelernt haben – Klassen, Vererbung, Schnittstellen und Polymorphie – und kombinieren sie auf spezifische Weise, um bestimmte Probleme zu lösen.

Entwurfsmuster werden typischerweise in drei Kategorien unterteilt:

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

In den kommenden Lektionen werden Sie spezifische Muster aus jeder Kategorie kennenlernen. Jedes Muster adressiert ein bestimmtes Problem: sicherzustellen, dass nur eine Instanz einer Klasse existiert, Objekte zu erstellen, ohne genaue Klassen anzugeben, oder Objekten zu ermöglichen, andere über Änderungen zu benachrichtigen. Zu verstehen, wann und warum man jedes Muster verwendet, ist genauso wichtig wie zu wissen, wie man es implementiert.

challenge icon

Aufgabe

Einfach

Lassen Sie uns ein einfaches Problemlösungssystem bauen, das zeigt, wie Entwurfsmuster Code nach Kategorien organisieren! Sie werden eine Struktur erstellen, die verschiedene Software-Herausforderungen klassifiziert und vorschlägt, welcher Mustertyp bei deren Lösung helfen könnte.

Sie werden Ihren Code in zwei Dateien organisieren:

  • patterns.dart: Erstellen Sie ein Enum namens PatternCategory mit drei Werten: creational, structural und behavioral. Jeder Wert sollte ein String description Feld haben, das seinen Zweck erklärt:
    • creational: "Handles object creation"
    • structural: "Handles object composition"
    • behavioral: "Handles object communication"
    Erstellen Sie außerdem eine Klasse namens Problem, die eine Software-Herausforderung darstellt. Sie sollte ein String name Feld und ein PatternCategory category Feld haben. Fügen Sie eine Methode suggest() hinzu, die einen String im Format [name] -> Use a [category description] pattern zurückgibt.
  • main.dart: Importieren Sie Ihre patterns-Datei und demonstrieren Sie, wie verschiedene Probleme verschiedenen Musterkategorien zugeordnet werden. Erstellen Sie drei Problem Instanzen:
    • Ein Problem namens Ensure single database connection mit der Kategorie creational
    • Ein Problem namens Make old API work with new system mit der Kategorie structural
    • Ein Problem namens Notify users when data changes mit der Kategorie behavioral
    Rufen Sie suggest() für jedes Problem auf und geben Sie die Ergebnisse aus.

Diese Herausforderung hilft Ihnen zu verstehen, wie Entwurfsmuster nach der Art des Problems kategorisiert werden, das sie lösen – ein Schlüsselkonzept, während Sie in den kommenden Lektionen spezifische Muster kennenlernen!

Erwartete Ausgabe:

Ensure single database connection -> Use a Handles object creation pattern
Make old API work with new system -> Use a Handles object composition pattern
Notify users when data changes -> Use a Handles object communication pattern

Spickzettel

Design Patterns (Entwurfsmuster) sind bewährte Lösungen für häufig auftretende Programmierprobleme. Sie sind Vorlagen, die OOP-Konzepte (Klassen, Vererbung, Schnittstellen, Polymorphismus) auf spezifische Weise kombinieren.

Design Patterns werden in drei Kategorien unterteilt:

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

Probier es selbst

import 'patterns.dart';

void main() {
  // TODO: Erstelle drei Problem-Instanzen:
  // 1. name: "Ensure single database connection", category: creational
  // 2. name: "Make old API work with new system", category: structural
  // 3. name: "Notify users when data changes", category: behavioral

  // TODO: Rufe suggest() für jedes Problem auf und gib die Ergebnisse 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