Design Patterns
GoF-Patterns nach Kategorie – Erzeugungs-, Struktur-, Verhaltensmuster.
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
| Kategorie | Frage | Wichtigste Patterns |
|---|---|---|
| Erzeugungsmuster | Wie werden Objekte erzeugt? | Singleton, Factory, Builder, Prototype |
| Strukturmuster | Wie werden Objekte/Klassen zusammengesteckt? | Adapter, Decorator, Composite, Facade, Proxy |
| Verhaltensmuster | Wie kommunizieren Objekte? | Observer, Strategy, Iterator, Template Method, Command |
Singleton (Erzeugung)
Genau eine Instanz einer Klasse, global zugreifbar. Typisch für Konfigurationen, Logger, Caches.
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.
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).
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 KLASSEStrategy (Verhalten)
Austauschbare Algorithmen als Objekte. Beispiel: verschiedene Rabatt- oder Sortierstrategien.
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.
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
| Szenario | Passendes Pattern |
|---|---|
| Globaler Zugriff auf eine Konfiguration | Singleton |
| Verschiedene Versand-/Zahlarten austauschbar | Strategy |
| UI soll bei Modelländerung automatisch updaten | Observer |
| Alte Bibliothek mit neuer Schnittstelle nutzen | Adapter |
| Funktionen zur Laufzeit nachrüsten (Logging-Wrapper) | Decorator |
| Trennung Datenmodell / Darstellung / Steuerung in Webapp | MVC |
| Erzeugung verschiedener Untertypen je nach Eingabe | Factory 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

Design Pattern für Fachinformatiker (Singleton, Observer, Factory, MVC) – IHK AP2 AE
Speziell auf die AP2-Prüfung zugeschnitten – die 4 Pflicht-Patterns.

Teil 1 – OOP (Objekt Orientiert Programmierung) für Fachinformatiker – IHK AP2 AE
OO-Grundlagen vom selben Kanal als Vorbereitung auf Design Patterns.
Externe Inhalte – AP2 Lernhub ist nicht für die Verfügbarkeit oder Korrektheit der verlinkten Seiten verantwortlich.