Sobes.tech
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.