Middle+
Was sind strukturelle Entwurfsmuster?
sobes.tech KI
Antwort von AI
Strukturmuster in der Softwareentwicklung beschreiben, wie Klassen und Objekte kombiniert werden können, um größere Strukturen zu erstellen. Sie helfen dabei, die Interaktion zwischen Objekten zu organisieren, wodurch das System flexibler und wartungsfreundlicher wird.
Einige gängige Strukturmuster:
- Adapter (Adapter): Ermöglicht die Zusammenarbeit von Klassen mit inkompatiblen Schnittstellen.
- Brücke (Bridge): Trennt die Abstraktion von ihrer Implementierung, sodass beide unabhängig voneinander geändert werden können.
- Kompositum (Composite): Ermöglicht die Behandlung einer Gruppe von Objekten wie ein einzelnes Objekt.
- Dekorateur (Decorator): Fügt Objekten dynamisch neues Verhalten hinzu, ohne deren Code zu ändern.
- Fassade (Facade): Bietet eine einheitliche Schnittstelle zu einer Menge von Schnittstellen in einem Subsystem.
- Flyweight (Flyweight): Spart Speicher, indem gemeinsamer Zustand zwischen vielen kleinen Objekten geteilt wird.
- Proxy (Proxy): Bietet eine Stellvertreter-Objekt, um den Zugriff auf ein anderes Objekt zu kontrollieren.
Beispiel für die Anwendung des Decorator-Musters:
# Basiskomponente
class Coffee:
def cost(self):
return 5
def description(self):
return "Normaler Kaffee"
# Basisschmuck
class CoffeeDecorator:
def __init__(self, coffee):
self._coffee = coffee
def cost(self):
return self._coffee.cost()
def description(self):
return self._coffee.description()
# Konkreter Decorator
class MilkDecorator(CoffeeDecorator):
def cost(self):
return self._coffee.cost() + 2
def description(self):
return self._coffee.description() + ", mit Milch"
# Verwendung
my_coffee = Coffee()
print(my_coffee.description(), "-", my_coffee.cost()) # Normaler Kaffee - 5
coffee_with_milk = MilkDecorator(my_coffee)
print(coffee_with_milk.description(), "-", coffee_with_milk.cost()) # Normaler Kaffee, mit Milch - 7
Diese Muster bieten Flexibilität durch die Verwendung von Objektkomposition anstelle von Vererbung, was Änderungen am System ermöglicht, ohne den bestehenden Code zu verändern.