Comprendre le Design Pattern Adapter avec un exemple concret en Java
Le Design Pattern Adapter
Le design pattern Adapter est utilisé lorsqu’on souhaite faire communiquer deux classes qui n’ont pas la même interface. En d’autres termes, c’est comme un traducteur qui permet à deux systèmes différents de se comprendre.
Je vais t’expliquer cela avec un exemple simple et concret que tout le monde peut comprendre.
🎧 Cas réel : Brancher un vieux casque sur un smartphone moderne
Imaginons que tu as :
- Un vieux casque audio avec une prise jack 3,5 mm
- Un smartphone moderne qui n’a que USB-C
Le problème :
Le casque et le smartphone ne peuvent pas se connecter directement.
La solution ? Un Adapter (ou adaptateur) :
- Il prend la prise jack du casque
- Il la transforme en USB-C pour le smartphone
- Ainsi, tout fonctionne sans changer le casque ni le smartphone
🏗️ Comment ça se traduit en programmation ?
- Le Smartphone attend une interface
USB_C. - Le VieuxCasque a l’interface
Jack35. - L’Adapter traduit
Jack35enUSB_C.
Ainsi, le smartphone peut utiliser le vieux casque sans connaître ses détails internes.
🧪 Exemple complet en Java (code intégré)
1. Interfaces de base
// Interface du smartphone
interface USB_C {
void connecter();
}
// Interface du vieux casque
interface Jack35 {
void brancher();
}
2. Implémentation du vieux casque
class VieuxCasque implements Jack35 {
@Override
public void brancher() {
System.out.println("Casque jack 3.5 mm branché.");
}
}
3. Adapter pour USB-C
class JackToUSBCAdapter implements USB_C {
private final Jack35 vieuxCasque;
public JackToUSBCAdapter(Jack35 vieuxCasque) {
this.vieuxCasque = vieuxCasque;
}
@Override
public void connecter() {
System.out.println("Adaptateur jack -> USB-C en action...");
vieuxCasque.brancher();
}
}
4. Smartphone
class Smartphone {
public void brancherCasque(USB_C usbCDevice) {
usbCDevice.connecter();
System.out.println("Le smartphone peut maintenant écouter la musique !");
}
}
5. Main
public class Main {
public static void main(String[] args) {
VieuxCasque casque = new VieuxCasque();
USB_C adapter = new JackToUSBCAdapter(casque);
Smartphone phone = new Smartphone();
phone.brancherCasque(adapter);
}
}
Résultat attendu
Adaptateur jack -> USB-C en action...
Casque jack 3.5 mm branché.
Le smartphone peut maintenant écouter la musique !
🧩 Pourquoi c’est utile dans la vraie vie ?
- Connecter de vieux logiciels à de nouvelles API
- Faire communiquer des systèmes tiers incompatibles
- Convertir des formats de fichiers
- Adapter de vieux contrôleurs à de nouvelles consoles
Il permet de :
- Réutiliser des composants existants
- Éviter de réécrire du code
- Assurer la compatibilité
📝 Conclusion
L’Adapter est un pattern très pratique pour la compatibilité et la réutilisation. Il permet de connecter des objets ou des systèmes différents sans modifier leur code. Simple, efficace et utilisé partout, que tu sois étudiant, développeur débutant ou professionnel confirmé.