AP2Lernhub
Mittel

Design Patterns

GoF-Patterns nach Kategorie – Erzeugungs-, Struktur-, Verhaltensmuster.

Warum Priorität „Mittel"? Gelegentlich Teil der Prüfung (40–59%). Verstehen, aber nicht überinvestieren.

Lernziele

  • Die drei GoF-Kategorien (Erzeugungs-, Struktur-, Verhaltensmuster) sicher zuordnen
  • Singleton, Factory, Observer, Strategy, Adapter, Decorator und MVC kennen und einsetzen können
  • Pseudocode oder kurzes Java-Snippet je Pattern lesen und schreiben
  • Zu einem Szenario das passende Pattern vorschlagen und begründen

Die drei GoF-Kategorien

KategorieFrageWichtigste Patterns
ErzeugungsmusterWie werden Objekte erzeugt?Singleton, Factory, Builder, Prototype
StrukturmusterWie werden Objekte/Klassen zusammengesteckt?Adapter, Decorator, Composite, Facade, Proxy
VerhaltensmusterWie kommunizieren Objekte?Observer, Strategy, Iterator, Template Method, Command

Singleton (Erzeugung)

Genau eine Instanz einer Klasse, global zugreifbar. Typisch für Konfigurationen, Logger, Caches.

java
public class Konfiguration {
    private static Konfiguration instanz;
    private Konfiguration() { /* privat verhindert direkten new */ }

    public static Konfiguration getInstanz() {
        if (instanz == null) {
            instanz = new Konfiguration();
        }
        return instanz;
    }
}

// Nutzung:
Konfiguration.getInstanz().getDbUrl();

Factory Method (Erzeugung)

Ein Objekt entscheidet, welche Unterklasse instanziiert wird. Kein direktes new im Client.

java
abstract class Logger {
    abstract void log(String msg);
}

class FileLogger    extends Logger { void log(String m) { /* … */ } }
class ConsoleLogger extends Logger { void log(String m) { /* … */ } }

class LoggerFactory {
    public static Logger create(String typ) {
        return switch (typ) {
            case "file"    -> new FileLogger();
            case "console" -> new ConsoleLogger();
            default        -> throw new IllegalArgumentException(typ);
        };
    }
}

// Nutzung:
Logger l = LoggerFactory.create("file");
l.log("Start");

Observer (Verhalten)

Ein Subjekt benachrichtigt registrierte Beobachter bei Zustandsänderungen. Basis vieler Event-Systeme (UI, Pub/Sub).

pseudocode
INTERFACE Beobachter
    METHODE update(zustand)
ENDE INTERFACE

KLASSE Subjekt
    - beobachter: LISTE
    METHODE registriere(b: Beobachter) → beobachter.add(b)
    METHODE benachrichtige(zustand)
        FÜR b IN beobachter TUE b.update(zustand)
ENDE KLASSE

Strategy (Verhalten)

Austauschbare Algorithmen als Objekte. Beispiel: verschiedene Rabatt- oder Sortierstrategien.

java
interface RabattStrategie {
    double berechne(double preis);
}

class KeinRabatt    implements RabattStrategie { public double berechne(double p) { return p; } }
class ProzentRabatt implements RabattStrategie {
    private double prozent;
    public ProzentRabatt(double p) { this.prozent = p; }
    public double berechne(double preis) { return preis * (1 - prozent / 100); }
}

class Bestellung {
    private RabattStrategie strategie;
    public Bestellung(RabattStrategie s) { this.strategie = s; }
    public double endpreis(double brutto) { return strategie.berechne(brutto); }
}

Adapter (Struktur)

Übersetzt die Schnittstelle einer Klasse in eine andere – «Stromadapter»-Prinzip.

pseudocode
KLASSE AlteAPI
    METHODE getKundennr() → STRING

KLASSE NeueAPI                  // Zielinterface
    METHODE getCustomerId() → STRING

KLASSE AlteAPIAdapter IMPLEMENTIERT NeueAPI
    - alt: AlteAPI
    METHODE getCustomerId()
        GIB alt.getKundennr()

Decorator (Struktur)

Erweitert ein Objekt zur Laufzeit um neue Funktionalität, ohne die Klasse zu ändern.

Beispiel: BufferedReader(new FileReader(...)) in Java – jedes Wrapper-Objekt fügt Features hinzu.

Iterator (Verhalten)

Sequenzieller Zugriff auf Elemente einer Sammlung, ohne deren interne Struktur preiszugeben. In Java über Iterable und Iterator.

MVC (Architektur, kein GoF)

Trennt Datenmodell, Darstellung und Steuerung – Pflichtbeispiel in der Prüfung.

  • Model: Daten + Geschäftslogik
  • View: UI / Darstellung (z. B. HTML, Swing-Fenster)
  • Controller: nimmt Eingaben entgegen, ruft Model auf, liefert View zurück

Vorteil: Austausch der UI ohne Eingriff in die Logik.

Pattern-Auswahl bei Szenarien

SzenarioPassendes Pattern
Globaler Zugriff auf eine KonfigurationSingleton
Verschiedene Versand-/Zahlarten austauschbarStrategy
UI soll bei Modelländerung automatisch updatenObserver
Alte Bibliothek mit neuer Schnittstelle nutzenAdapter
Funktionen zur Laufzeit nachrüsten (Logging-Wrapper)Decorator
Trennung Datenmodell / Darstellung / Steuerung in WebappMVC
Erzeugung verschiedener Untertypen je nach EingabeFactory Method

Übungen

Eine AntwortWelches Pattern garantiert genau eine Instanz einer Klasse?

Eine AntwortFür austauschbare Algorithmen (z. B. verschiedene Rabattarten) ist welches Pattern ideal?

Eine AntwortZu welcher Kategorie gehört Observer?

Eine AntwortEine alte API hat `getKundennr()`, deine neue Architektur erwartet `getCustomerId()`. Welches Pattern?

Eine AntwortMVC wird welcher Komponente zugeordnet?

MehrfachauswahlWelche Patterns gehören zu den Erzeugungsmustern?

Zum Weiterlernen

Externe Inhalte – AP2 Lernhub ist nicht für die Verfügbarkeit oder Korrektheit der verlinkten Seiten verantwortlich.

Verwandte Themen