Design patterns: Adapter

Mauto 2 min

Il pattern Adapter 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. Interfaccia Uniforme: Fornisce un’interfaccia uniforme che maschera la complessità delle classi sottostanti, semplificando l’interazione tra il client e le classi adattate.
  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.
  8. Adattamento di Comportamenti: Oltre a convertire le interfacce, gli adapter possono anche modificare o estendere il comportamento degli oggetti adattati, consentendo una maggiore personalizzazione.

Esempio in 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

content_copy Copiato