Das Singleton-Muster stellt sicher, dass eine Klasse nur eine Instanz hat und bietet einen globalen Zugriffspunkt darauf. Verwende es, wenn du genau ein Objekt zur Koordination systemweiter Aktionen benötigst – wie einen Konfigurations-Manager, Logger oder Verbindungspool.
Das Factory-Method-Muster definiert eine Schnittstelle zur Objekterstellung, überlässt aber Unterklassen die Entscheidung, welche Klasse instanziiert wird. Verwende es, wenn du die Objekterstellung von der Verwendung entkoppeln möchtest, um Implementierungen leicht ersetzen zu können.
Das Abstract-Factory-Muster bietet eine Schnittstelle zur Erstellung von Familien verwandter Objekte, ohne deren konkrete Klassen zu spezifizieren. Verwende es, wenn dein System unabhängig von der Produkterstellung sein soll, besonders bei mehreren Produktfamilien.
Das Builder-Muster trennt die Konstruktion eines komplexen Objekts von seiner Darstellung, sodass derselbe Prozess verschiedene Darstellungen erzeugen kann. Verwende es, wenn die Objektkonstruktion viele unabhängig variierende Schritte oder Konfigurationen erfordert.
Das Prototype-Muster erstellt neue Objekte durch Kopieren eines vorhandenen Objekts (des Prototyps). Verwende es, wenn die Objekterstellung teuer ist und ein ähnliches Objekt bereits existiert – Klonen ist schneller und bequemer als das Erstellen von Grund auf.
Das Adapter-Muster ermöglicht es zwei inkompatiblen Schnittstellen, zusammenzuarbeiten, indem eine davon in ein Übersetzerobjekt eingewickelt wird. Verwende es, wenn du eine Drittanbieter-Bibliothek, eine Legacy-Klasse oder eine API integrieren musst, deren Signatur nicht zu deinem Code passt.
Das Decorator-Muster fügt einem Objekt dynamisch neues Verhalten hinzu, indem es in ein anderes Objekt mit derselben Schnittstelle eingewickelt wird. Verwende es, wenn du übergreifende Funktionen — Logging, Caching, Validierung — ohne Vererbung oder Verschmutzung des Basistyps hinzufügen willst.
Das Facade-Muster bietet eine einfache, einheitliche Schnittstelle zu einem komplexen Subsystem. Verwende es, wenn eine Gruppe von Klassen schwer direkt zu nutzen ist und du nur die Operationen auf hoher Ebene exponieren willst, die der Rest der Anwendung tatsächlich braucht.
Das Proxy-Muster stellt einen Stellvertreter für ein anderes Objekt bereit, um den Zugriff darauf zu kontrollieren. Verwende es für verzögerte Initialisierung, Zugriffskontrolle, Caching oder Remote-Aufrufe — Situationen, in denen du Aufrufe abfangen willst, ohne das echte Objekt zu ändern.
Das Composite-Muster erlaubt es, einzelne Objekte und Gruppen von Objekten einheitlich über eine gemeinsame Schnittstelle zu behandeln. Verwende es, wenn deine Daten einen Baum bilden — Dateien und Ordner, UI-Knoten, organisatorische Hierarchien — und Aufrufer sich nicht darum kümmern sollten, ob sie mit einem Blatt oder einem Zweig sprechen.