STRUCTURAL

Bridge

Separare un'astrazione dalla sua implementazione in modo che possano variare indipendentemente.

Il Problema

Quando hai una gerarchia di classi che cresce in due dimensioni indipendenti (es. forme e colori), finisci con una esplosione di sottoclassi.

La Soluzione

Dividere la gerarchia in due gerarchie separate: astrazione e implementazione. L'astrazione contiene un riferimento all'implementazione e delega il lavoro ad essa.

Struttura

Abstraction usa Implementor interface. RefinedAbstraction estende Abstraction. ConcreteImplementor implementa Implementor.

Partecipanti:
Abstraction - definisce l'interfaccia di astrazione e mantiene riferimento a Implementor
RefinedAbstraction - estende l'interfaccia definita da Abstraction
Implementor - interfaccia per le classi di implementazione
ConcreteImplementor - implementa l'interfaccia Implementor
Esempi di Codice

Bridge per Dispositivi e Telecomandi

Separazione tra dispositivi (TV, Radio) e telecomandi (Base, Avanzato).

JAVASCRIPT
Loading...
Esempi nel Mondo Reale
GUI frameworks - separazione tra widget e rendering engine (Windows/Linux/Mac)
Database drivers - separazione tra API e implementazione specifica del DB
Dispositivi e controller - telecomandi, stampanti, dispositivi IoT
Messaging systems - separazione tra sender/receiver e protocollo (SMTP, SMS, Push)
Quando Usarlo
Quando vuoi evitare un legame permanente tra astrazione e implementazione
Quando sia astrazione che implementazione devono essere estensibili tramite sottoclassi
Quando cambiamenti nell'implementazione non devono impattare i client
Quando hai una proliferazione di classi dovuta a combinazioni multiple
Quando NON Usarlo
Quando hai una sola implementazione
Quando l'astrazione e implementazione sono strettamente accoppiate
Quando la complessità aggiunta non è giustificata