Middle+
Welche Aufgaben haben Sie mit Designmustern gelöst?
sobes.tech KI
Antwort von AI
Er hat verschiedene Muster angewendet, um die Struktur und Wartbarkeit des Codes zu verbessern:
Erzeugende Muster:
- Singleton: Zur Erstellung einer einzigen Instanz von Objekten, z.B. eines Konfigurationsmanagers oder eines Verbindungspools.
public final class ConfigManager { private static ConfigManager instance; private ConfigManager() {} // Privater Konstruktor public static synchronized ConfigManager getInstance() { if (instance == null) { instance = new ConfigManager(); } return instance; } } - Factory Method: Zur Erstellung von Objekten mit bestimmten Eigenschaften, ohne die konkreten Klassen explizit anzugeben. Wird bei der Arbeit mit verschiedenen Dateiparsert-Typen verwendet.
- Abstract Factory: Zur Erstellung von Familien verwandter oder abhängiger Objekte, ohne ihre konkreten Klassen anzugeben. Wird bei der Arbeit mit verschiedenen Datenquellen (z.B. Dateisystem, Datenbank) und den entsprechenden Objekten verwendet.
Strukturelle Muster:
- Adapter: Zur Anpassung der Schnittstelle einer Klasse an eine andere, die der Kunde erwartet. Wird verwendet, um externe Bibliotheken mit inkompatiblen Schnittstellen zu integrieren.
public interface Target { void request(); } public class Adaptee { public void specificRequest() { System.out.println("Spezifische Anfrage des Adaptee"); } } public class Adapter implements Target { private Adaptee adaptee; public Adapter(Adaptee adaptee) { this.adaptee = adaptee; } @Override public void request() { adaptee.specificRequest(); } } - Decorator: Zur dynamischen Hinzufügung neuer Verantwortlichkeiten zu Objekten, ohne deren Struktur zu ändern. Wird verwendet, um Funktionalitäten wie Logging oder Caching hinzuzufügen.
- Composite: Zur Zusammenfassung von Objekten in Baumstrukturen, um Hierarchien "Teil-Ganzes" darzustellen. Wird bei der Arbeit mit UI-Elementen oder Dateistrukturen verwendet.
Verhaltensmuster:
- Observer: Zur Definition einer "1-zu-viele"-Abhängigkeit zwischen Objekten, so dass bei Änderung des Zustands eines Objekts alle abhängigen Objekte benachrichtigt und aktualisiert werden. Wird zur Implementierung von Benachrichtigungssystemen verwendet.
import java.util.ArrayList; import java.util.List; public class Subject { private List<Observer> observers = new ArrayList<>(); private int state; public void attach(Observer observer) { observers.add(observer); } public void setState(int state) { this.state = state; notifyObservers(); } private void notifyObservers() { for (Observer observer : observers) { observer.update(); } } } public interface Observer { void update(); } - Strategy: Zur Definition von Familien von Algorithmen, die gekapselt und austauschbar sind. Wird verwendet, um verschiedene Datenverarbeitungsstrategien je nach Kontext auszuwählen.
- Template Method: Zur Definition des Algorithmusgerüsts in einer Operation, wobei einige Schritte von Unterklassen definiert werden. Wird verwendet, um den Prozess der Anforderungsverarbeitung zu standardisieren.