Sobes.tech
Middle

Welche Entwurfsmuster haben Sie neben Singleton verwendet?

sobes.tech KI

Antwort von AI

  • Fabrikmethode. Wird verwendet, um Objekte zu erstellen, ohne den konkreten Klassentyp explizit anzugeben. Nützlich, wenn die Logik der Objekterstellung von Unterklassen abhängt.
  • Abstrakte Fabrik. Wird eingesetzt, um Familien verwandter oder abhängiger Objekte zu erstellen, wobei eine Schnittstelle dafür bereitgestellt wird, ohne konkrete Klassen anzugeben.
  • Builder. Wird verwendet, um komplexe Objekte schrittweise zu erstellen, wobei die Reihenfolge und Kombination der Schritte variieren können. Vermeidet den "telescoping constructor".
  • Observer. Wird implementiert, um "1 zu vielen"-Abhängigkeiten zwischen Objekten zu schaffen, wobei eine Zustandsänderung eines Objekts automatisch alle abhängigen Objekte benachrichtigt.
  • Strategie. Wird angewandt, um eine Familie von Algorithmen zu definieren, jeden zu kapseln und ihre Austauschbarkeit zu gewährleisten. Ermöglicht die Auswahl des Algorithmus zur Laufzeit.
  • Decorator. Wird verwendet, um Objekten dynamisch neue Verantwortlichkeiten hinzuzufügen, ohne ihre Struktur zu verändern.
  • Proxy. Wird in Fällen eingesetzt, in denen der Zugriff auf ein Objekt kontrolliert werden muss, z.B. für Lazy Loading oder Remote-Zugriff.
  • Template-Methode. Wird verwendet, um den Algorithmus-Skelett in der Oberklasse zu definieren, wobei Unterklassen bestimmte Schritte des Algorithmus überschreiben können, ohne die Grundstruktur zu verändern.
  • Adapter. Wird eingesetzt, um die Schnittstelle einer Klasse in die Schnittstelle umzuwandeln, die von Clients erwartet wird. Erlaubt die Zusammenarbeit von Klassen mit inkompatiblen Schnittstellen.
  • Befehl. Wird verwendet, um eine Anfrage in Form eines Objekts zu kapseln, was es ermöglicht, Clients mit verschiedenen Anfragen zu parametrisieren, Anfragen in eine Warteschlange zu stellen oder Operationen zu protokollieren sowie Undo-Funktionalität zu unterstützen.

Beispiel für die Implementierung der Factory Method:

// Produkt-Schnittstelle
interface Product {
    void doSomething();
}

// Konkrete Produkte
class ConcreteProductA implements Product {
    @Override
    public void doSomething() {
        System.out.println("Etwas in Product A tun");
    }
}

class ConcreteProductB implements Product {
    @Override
    public void doSomething() {
        System.out.println("Etwas in Product B tun");
    }
}

// Fabrik-Schnittstelle
abstract class Creator {
    public abstract Product factoryMethod();

    public void someOperation() {
        Product product = factoryMethod();
        product.doSomething();
    }
}

// Konkrete Fabriken
class ConcreteCreatorA extends Creator {
    @Override
    public Product factoryMethod() {
        return new ConcreteProductA();
    }
}

class ConcreteCreatorB extends Creator {
    @Override
    public Product factoryMethod() {
        return new ConcreteProductB();
    }
}