# Design patterns: Adapter

> Adapter design pattern con esempi in PHP

- URL: https://mautoblog.com/posts/design-patterns/adapter/
- Lingua: it
- Pubblicato: 2024-09-27
- Aggiornato: 2026-10-14
- Autore: Mauto
- Categorie: Sviluppo Software, Tecnologia
- Tags: Architettura Software, Best Practices, PHP
- Guida: Design Patterns (parte 7)
- Traduzione (en): https://mautoblog.com/en/posts/design-patterns/adapter/

---
Il pattern Adapter è un design pattern strutturale che consente a interfacce incompatibili di lavorare insieme.

## Caratteristiche dell'Adapter pattern
1. **Compatibilità tra Interfacce:** L'Adapter Pattern permette di adattare un'interfaccia esistente a un'altra interfaccia che il client si aspetta, rendendo classi incompatibili in grado di lavorare insieme.
2. **Separazione delle Responsabilità:** Favorisce la separazione tra il codice client e le classi che devono essere adattate. Il client non deve modificare il proprio codice per utilizzare le classi adattate.
3. **Riutilizzo del Codice Esistente:** Consente di riutilizzare classi esistenti senza modificarle, facilitando l'integrazione di nuove funzionalità in un'applicazione.
4. **Flessibilità:** Gli adapter possono essere facilmente creati per adattare nuove classi, rendendo l'applicazione flessibile e facilitando l'integrazione di diversi componenti.
5. **Traduzione delle Chiamate:** Traduce le chiamate del client nel formato atteso dalla classe adattata.
6. **Possibilità di Adattare Diversi Tipi di Classi:** Può adattare sia classi che interfacce, consentendo di lavorare con vari tipi di componenti, inclusi oggetti esterni o librerie di terze parti.
7. **Sviluppo Incrementale:** Facilita un approccio di sviluppo incrementale, permettendo di aggiungere nuove funzionalità o componenti senza dover ristrutturare l'intero sistema.

### Esempio in PHP:
```php
class OldPaymentSystem {
    public function pay() {
        return "Pagamento con il vecchio sistema.";
    }
}

interface NewPaymentInterface {
    public function processPayment();
}

class PaymentAdapter implements NewPaymentInterface {
    private $oldSystem;

    public function __construct(OldPaymentSystem $oldSystem) {
        $this->oldSystem = $oldSystem;
    }

    public function processPayment() {
        return $this->oldSystem->pay(); // Adattiamo il vecchio metodo al nuovo sistema.
    }
}

// Utilizzo
$oldPayment = new OldPaymentSystem();
$adapter = new PaymentAdapter($oldPayment);
echo $adapter->processPayment();
```
[TORNA ALLA GUIDA](/posts/design-patterns/)
