Proxy, Decorator, Adapter e Bridge Pattern

1. Introduzione

In questo articolo, ci concentreremo sui modelli di progettazione strutturale in Java e discuteremo di cosa sono e alcune differenze fondamentali tra alcuni di essi.

2. Modelli di progettazione strutturale

Secondo Gang Of Four (GoF), i design pattern possono essere classificati in tre tipi:

  1. Creazionale
  2. Strutturale
  3. comportamentale

In poche parole, i modelli strutturali si occupano della composizione di classi e oggetti. Forniscono modi diversi di utilizzare la composizione e l'ereditarietà degli oggetti per creare un'astrazione.

3. Pattern proxy

Con questo modello, creiamo un intermediario che funge da interfaccia per un'altra risorsa , ad esempio un file, una connessione. Questo accesso secondario fornisce un surrogato per il componente reale e lo protegge dalla complessità sottostante.

Per un esempio dettagliato del pattern, date un'occhiata al post dedicato: The Proxy Pattern in Java.

Punti chiave di differenziazione:

  • Il proxy fornisce la stessa interfaccia dell'oggetto a cui tiene il riferimento e non modifica i dati in alcun modo; è in contrasto con i modelli Adapter e Decorator che alterano e decorano rispettivamente le funzionalità di istanze preesistenti
  • Il proxy di solito ha le informazioni sul soggetto reale al momento della compilazione stesso mentre Decorator e Adapter vengono iniettati in fase di esecuzione, conoscendo solo l'interfaccia dell'oggetto reale

4. Motivo Decoratore

Questo modello è utile per migliorare il comportamento di un oggetto. Per una panoramica dettagliata, dai un'occhiata al tutorial focalizzato qui: Decorator Pattern in Java

Punti chiave di differenziazione:

  • Sebbene i modelli Proxy e Decorator abbiano strutture simili, differiscono nell'intenzione; mentre lo scopo principale del proxy è facilitare la facilità d'uso o l'accesso controllato, un decoratore attribuisce ulteriori responsabilità
  • Entrambi i modelli Proxy e Adapter contengono un riferimento all'oggetto originale
  • Tutti i decoratori di questo modello possono essere utilizzati in modo ricorsivo, un numero infinito di volte, cosa non possibile con altri modelli

5. Modello adattatore

Il pattern Adapter viene utilizzato per collegare due interfacce incompatibili che altrimenti non possono essere collegate direttamente. Un adattatore avvolge una classe esistente con una nuova interfaccia in modo che diventi compatibile con l'interfaccia necessaria.

Per una descrizione dettagliata e l'implementazione, dai un'occhiata al post dedicato: Adapter Pattern in Java

Le principali differenze tra i modelli Adapter e Proxy sono:

  • Sebbene il proxy fornisca la stessa interfaccia, Adapter fornisce un'interfaccia diversa compatibile con il suo client
  • Il pattern dell'adattatore viene utilizzato dopo che i componenti dell'applicazione sono stati progettati in modo da poterli utilizzare senza modificare il codice sorgente. Ciò è in contrasto con il modello Bridge, che viene utilizzato prima della progettazione dei componenti.

6. Pattern ponte

Il pattern Bridge viene utilizzato per separare un'astrazione dalla sua implementazione in modo che le due possano variare indipendentemente.

Ciò significa creare un'interfaccia bridge che utilizzi i principi OOP per separare le responsabilità in diverse classi astratte.

Per una descrizione dettagliata e l'implementazione, dai un'occhiata al post dedicato: Bridge Pattern in Java

Punti chiave di differenziazione :

  • Un modello Bridge può essere implementato solo prima della progettazione dell'applicazione.
  • Consente a un'astrazione e un'implementazione di cambiare in modo indipendente, mentre un pattern Adapter rende possibile il lavoro di classi incompatibili

7. Conclusione

In questo articolo, ci siamo concentrati sullo Structural Design Pattern e sulle differenze tra alcuni dei suoi tipi.

Come sempre, l'implementazione completa di questo tutorial può essere trovata su Github.