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.