Sobes.tech
Middle+

Cosa sono i pattern di progettazione strutturale?

sobes.tech AI

Risposta dell'AI

I pattern strutturali di progettazione descrivono come classi e oggetti possono essere combinati per costruire strutture più grandi. Aiutano a organizzare l'interazione tra gli oggetti, rendendo il sistema più flessibile e manutenibile.

Alcuni pattern strutturali comuni:

  • Adapter (Adattatore): Permette a classi con interfacce incompatibili di lavorare insieme.
  • Bridge (Ponte): Separa l'astrazione dalla sua implementazione, permettendo a entrambe di cambiare indipendentemente.
  • Composite (Composto): Permette di trattare un gruppo di oggetti come un singolo oggetto.
  • Decorator (Decoratore): Aggiunge dinamicamente nuovo comportamento agli oggetti senza modificarne il codice.
  • Facade (Facciata): Fornisce un'interfaccia unificata a un insieme di interfacce in un sottosistema.
  • Flyweight (Flyweight): Risparmia memoria condividendo lo stato comune tra molti piccoli oggetti.
  • Proxy (Proxy): Fornisce un sostituto per un altro oggetto per controllare l'accesso ad esso.

Esempio di utilizzo del pattern Decorator:

# Componente base
class Coffee:
    def cost(self):
        return 5

    def description(self):
        return "Caffè normale"

# Decoratore base
class CoffeeDecorator:
    def __init__(self, coffee):
        self._coffee = coffee

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

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

# Decoratore concreto
class MilkDecorator(CoffeeDecorator):
    def cost(self):
        return self._coffee.cost() + 2

    def description(self):
        return self._coffee.description() + ", con latte"

# Uso
my_coffee = Coffee()
print(my_coffee.description(), "-", my_coffee.cost()) # Caffè normale - 5

coffee_with_milk = MilkDecorator(my_coffee)
print(coffee_with_milk.description(), "-", coffee_with_milk.cost()) # Caffè normale, con latte - 7

Questi pattern offrono flessibilità attraverso l'uso della composizione di oggetti invece dell'ereditarietà, consentendo di apportare modifiche al sistema senza modificare il codice esistente.