Middle+
Czym są wzorce projektowe strukturalne?
sobes.tech AI
Odpowiedź od AI
Wzorce projektowe strukturalne opisują, jak klasy i obiekty mogą być łączone w celu tworzenia większych struktur. Pomagają one organizować interakcję między obiektami, czyniąc system bardziej elastycznym i łatwiejszym w utrzymaniu.
Niektóre popularne wzorce strukturalne:
- Adapter (Adapter): Umożliwia współpracę klas z niekompatybilnymi interfejsami.
- Most (Bridge): Oddziela abstrakcję od jej implementacji, pozwalając na ich niezależne zmiany.
- Kompozyt (Composite): Pozwala traktować grupę obiektów jak pojedynczy obiekt.
- Dekorator (Decorator): Dynamicznie dodaje nowe zachowanie do obiektów bez zmiany ich kodu.
- Fasada (Facade): Zapewnia zunifikowany interfejs do zestawu interfejsów w podsystemie.
- Flyweight (Flyweight): Oszczędza pamięć, dzieląc wspólne stan między wieloma małymi obiektami.
- Proxy (Proxy): Zapewnia zastępcę dla innego obiektu w celu kontroli dostępu do niego.
Przykład zastosowania wzorca Dekorator:
# Podstawowy komponent
class Coffee:
def cost(self):
return 5
def description(self):
return "Zwykła kawa"
# Podstawowy dekorator
class CoffeeDecorator:
def __init__(self, coffee):
self._coffee = coffee
def cost(self):
return self._coffee.cost()
def description(self):
return self._coffee.description()
# Konkretne dekoratory
class MilkDecorator(CoffeeDecorator):
def cost(self):
return self._coffee.cost() + 2
def description(self):
return self._coffee.description() + ", z mlekiem"
# Użycie
my_coffee = Coffee()
print(my_coffee.description(), "-", my_coffee.cost()) # Zwykła kawa - 5
coffee_with_milk = MilkDecorator(my_coffee)
print(coffee_with_milk.description(), "-", coffee_with_milk.cost()) # Zwykła kawa, z mlekiem - 7
Te wzorce zapewniają elastyczność dzięki użyciu kompozycji obiektów zamiast dziedziczenia, co pozwala na wprowadzanie zmian w systemie bez modyfikacji istniejącego kodu.