Sobes.tech
Middle+

Ce sunt modelele de proiectare structurale?

sobes.tech AI

Răspuns de la AI

Modelele de proiectare structurale descriu modul în care clasele și obiectele pot fi combinate pentru a construi structuri mai mari. Ele ajută la organizarea interacțiunii dintre obiecte, făcând sistemul mai flexibil și mai ușor de întreținut.

Unele modele structurale comune:

  • Adapter (Adaptor): Permite claselor cu interfețe incompatibile să lucreze împreună.
  • Bridge (Pod): Separă abstracția de implementarea sa, permițându-le să se schimbe independent.
  • Composite (Compozit): Permite tratarea unui grup de obiecte ca un singur obiect.
  • Decorator (Decorator): Adaugă dinamic comportament nou obiectelor fără a modifica codul lor.
  • Facade (Fațadă): Oferă o interfață unificată pentru un set de interfețe dintr-un subsistem.
  • Flyweight (Flyweight): Economisește memorie împărțind starea comună între multe obiecte mici.
  • Proxy (Proxy): Oferă un înlocuitor pentru alt obiect pentru a controla accesul la acesta.

Exemplu de utilizare a pattern-ului Decorator:

# Component de bază
class Coffee:
    def cost(self):
        return 5

    def description(self):
        return "Cafea obișnuită"

# Decorator de bază
class CoffeeDecorator:
    def __init__(self, coffee):
        self._coffee = coffee

    def cost(self):
        return self._coffee.cost()

    def description(self):
        return self._coffee.description()

# Decorator concret
class MilkDecorator(CoffeeDecorator):
    def cost(self):
        return self._coffee.cost() + 2

    def description(self):
        return self._coffee.description() + ", cu lapte"

# Utilizare
my_coffee = Coffee()
print(my_coffee.description(), "-", my_coffee.cost()) # Cafea obișnuită - 5

coffee_with_milk = MilkDecorator(my_coffee)
print(coffee_with_milk.description(), "-", coffee_with_milk.cost()) # Cafea obișnuită, cu lapte - 7

Aceste modele oferă flexibilitate prin utilizarea compoziției obiectelor în loc de moștenire, permițând modificări în sistem fără a schimba codul existent.